Você está na página 1de 14

INTRODUO AO

FREESCALE PROCESSOR
EXPERT
PARA A DISCIPLINA EA076
Prof. Antonio A. F. Quevedo
FEEC / UNICAMP
Revisado em setembro de 2014

INTRODUO
O CodeWarrior 10 (CW10) o ambiente de desenvolvimento de software desenvolvido pela
Freescale para os microcontroladores e microprocessadores por ela desenvolvidos. Ao contrrio das
verses anteriores, desenvolvidas de maneira totalmente proprietria, a verso 10 foi desenvolvida a
partir do Eclipse.
Um dos recursos presentes no CodeWarrior 10 o Processor Expert. Esta ferramenta permite a
gerao automatizada de cdigo de inicializao de perifricos e outros recursos, bem como funes
de alto nvel para o gerenciamento dos mesmos recursos. O sistema de wizard e GUI permite a
rpida definio dos parmetros de inicializao do perifrico e a criao das funes de alto nvel
desejadas para sua utilizao. Esta apostila parte do princpio que o leitor conhece o CodeWarrior
10, conforme mostrado na disciplina EA871. Para isto, existe uma apostila similar a esta, e
recomenda-se a realizao dos passos da mesma antes de experimentar o Processor Expert. Nesta
apostila, as primeiras etapas sero idnticas s da outra apostila mencionada.
Neste passo-a-passo vamos mostrar como fcil criar um programa que realiza o Hello World
dos sistemas embarcados: fazer um LED piscar com frequncia definida. Para isto, vamos criar dois
componentes, que so pacotes compostos pela funo de inicializao de um dado recurso e suas
funes de alto nvel.
Obs: A aparncia de algumas janelas pode ser ligeiramente diferente em alguns computadores, mas
as diferenas no so suficientes para prejudicar este tutorial.

CRIANDO UM NOVO PROJETO


1. No Windows, v ao menu Iniciar - Programas - Freescale CodeWarrior - CW for MCU v10.6
CodeWarrior, ou chame o programa atravs do cone do CodeWarrior 10.6 na rea de trabalho.
2. Aparece o Workspace Launcher. Aqui voc determina qual workspace voc deseja utilizar.
Clique em Browse para escolher uma pasta para ser seu workspace ou selecione uma j existente na
lista drop-down. Clique em OK. Sugerimos que voc crie seu prprio workspace.

3. O CodeWarrior 10 vai abrir na perspectiva de programao. Pode-se ver a esquerda um painel


com todos os projetos do workspace. Uma pasta aberta significa que aquele projeto est aberto.
2

Na primeira utilizao do workspace, ao invs da perspectiva de programao, pode aparecer um


menu geral. Neste caso, basta escolher a opo Go to Workspace.

4. Para evitar problemas, evite ter mais de um projeto aberto de cada vez. Se houver diversos
projetos abertos, feche os desnecessrios clicando com o boto direito sobre a pasta do projeto
aberto e escolhendo a opo "Close Project".

5. A janela Commander no canto inferior esquerdo da perspectiva agrupa os comandos mais


comuns. Para criar um novo projeto, basta clicar em New MCU project nesta janela.

Alternativamente, no menu superior selecione File - New - Bareboard Project.

6. Na janela que se abre, escolha um nome para o projeto. No exemplo, foi escolhido o nome
"Hello". Se a caixa de seleo "Use default location" estiver selecionada, os arquivos sero salvos
na pasta do workspace, que pode ser vista logo abaixo da caixa. Desmarcando a caixa, pode-se
escolher outra pasta para colocar os arquivos. Depois, clique no boto "Next".

7. Agora deve-se escolher o microcontrolador ou a placa de desenvolvimento a ser utilizada. Neste


curso usamos o controlador MKL25Z128, na placa FRDM-KL25. Na rvore de opes, abra o
grupo "Kinetis L Series", depois o grupo "KL2x Family", depois KL25Z (48MHz) Family e
selecione MKL25Z128" Clique "Next".

Alternativamente, pode-se digitar KL25 na caixa de pesquisa (intitulada Device or board to be


used). Neste caso, o programa filtra as opes, apresentando apenas a sub-rvore dos
processadores KL25, e assim pode-se selecionar mais facilmente o processador-alvo.

8. Agora, aparece uma lista de possveis conexes. A conexo estabelecida entre o computador e a
placa permite transferir os programas para a placa, bem como executar a depurao em tempo real.
Neste caso, selecione a opo "OpenSDA, que o hardware de conexo existente na placa de
desenvolvimento. Desmarque quaisquer outras opes selecionadas por padro, e depois clique em
"Next".

9. Na prxima janela, mantenha as opes no padro e clique em "Next". Estas opes se referem
linguagem utilizada, uso de ponto flutuante, suporte a uso de porta serial ou console de debug, e
compilador a ser usado.
Obs: Na opo I/O Support, a opo default (UART) e a opo Debugger Console
acrescentam cdigo para suporte a funes printf e scanf atravs da porta serial ou de uma janela de
console. Quando estas funes no so necessrias, pode-se marcar a opo No I/O para reduzir o
tamanho do cdigo final e se evitar inicializaes desnecessrias. Sugerimos usar a terceira opo, a
menos que o experimento use as funes acima citadas (no o caso no curso EA871).

10. Nesta prxima janela, definiremos se o CodeWarrior usar ou no o Processor Expert, que o
nosso objetivo nesta apostila. Selecione a opo "Processor Expert" e clique em "Finish".

11. Veja que agora na lista de projetos, temos o projeto "Hello" criado e aberto. Clicando no
smbolo de "+" (ou no pequeno tringulo se estiver usando Windows 7/8) esquerda do folder,
podemos expandir o projeto e ver seus componentes pr-criados pelo CodeWarrior. Dentro do
folder "Sources", encontraremos o arquivo "main.c". Dando um duplo-clique neste arquivo, abrimos
7

o editor e podemos ver uma estrutura bsica de cdigo j feita pelo CodeWarrior, onde so
includas algumas bibliotecas e a funo main chama a funo PE_low_level_init(). Esta
funo est definida em outro arquivo, e conter chamadas a todas as funes de inicializao (uma
para cada componente do PE). Acima da janela de edio, pode-se ver a GUI do Processor Expert,
na aba Component Inspector. esquerda, existe uma pequena janela chamada Components,
que possui a relao de todos os componentes implementados. Pode-se evr que j foi criado um
componente chamado CPU, e que o Component Inspector est apresentando as opes para este
componente. Aqui pode-se definir alguns parmetros bsicos de operao da CPU, como, por
exemplo, a fonte e frequncia de clock. Neste projeto, deixaremos este componente inalterado.

12. Vamos agora criar os componentes necessrios para o projeto. Para tanto, deve-se clicar na aba
Components Library. Aparecer uma listagem de componentes disponveis. No primeiro uso, os
componentes so apresentados por categoria. Pode-se escolher outras formas de classificao ou
utilizar um assistente, dependendo da aba. Para controlar o LED da placa, vamos criar um pino de
sada digital, usando o componente BitIO. Podemos encontr-lo na aba por categorias, sob CPU
Internal Peripherals Port I/O. Pode-se ainda localiz-lo por ordem alfabtica, ou usar o
assistente respondendo s perguntas feitas pelo mesmo.

13. Aps a seleo, ser criado o componente Bit1 do tipo BitIO (veja no painel de
componentes esquerda). O nome fornecido padro e pode ser modificado na GUI. Vamos definir
os parmetros e funes do componente. Selecione o componente no painel correspondente, e
clique na aba do Component Inspector (veja que no trulo da aba aparece um *, indicando que os
parmetros ainda no foram salvos).
14. No canto superior direiro do Component Inspector, existem 2 botes que definem a
configurao bsica ou avanada. No modo bsico no podemos mudar o nome do componente,
assim usaremos o modo avanado, com mais recursos.

15. Veja que o Inspector possui 3 sub-abas: Propriedades, Mtodos e Eventos. Vamos inicialmente
definir as propriedades do componente. Clique no campo ao lado de Component name e mude o
nome para LED. Outras opes exibem caixas do tipo drop-down quando selecionadas.
Queremos um pino que seja exclusivamente de sada, ligado ao LED vermelho da placa FRDM
(olhando no manual da placa, vemos que o PTB18 ligado no catodo do LED vermelho). Sabemos
que o LED acende se o pino estiver em 0, ento queremos que ao iniciar o mesmo fique no nvel 1
para manter o LED apagado. Assim, definiremos o seguintes valores:

Pin for I/O: PTB18 (o nome do pino mais complexo, mas pode-se clicar no campo de valor
e escrever ptb18 que a opo correta aparecer).
Direction: Output
Initialization Init. Value: 1

16. Vamos agora definir quais as funes de alto nvel (aqui chamadas de mtodos) que sero
criadas pelo PE. Clique na aba de Mtodos e aparecer uma lista de possveis funes, tendo ao
lado a informao se elas devem ou no ser criadas. Ao colocar o cursor sobre o nome de cada
funo, apresentada uma janela mostrando a sua utilizao. Nosso exemplo demanda apenas a
funo NegVal, que inverte o estado do pino. Selecione generate code para esta funo e dont
generate code para todas as outras. No h problemas em gerar uma funo que no ser usada,
mas isto produzir um warning na compilao, e a gerao do cdigo para esta funo ir
10

aumentar o tamanho do cdigo-objeto. Por isso, uam boa prtica desativar as funes
desnecessrias.

17. Para preservar as configuraes feitas, vamos salvar o componente. Para isto, clique no boto
Save (smbolo de disquete) no canto superior esquerdo. Veja que o asterisco na aba do Inspector
sumiu.

18. Vamos criar agora o segundo componente, que um timer que gera uma interrupo peridica.
Assim, a cada interrupo, iremos chamar a funo NegVal para inverter o estado do LED. Na
Components Library, selecione o componente TimerInt. Voltando ao Component Inspector,
seleciona a aba de Propriedades, e veja que o nome do componente foi definido como TI1.
Podemos deix-lo assim. Veja que no painel dos componentes, o TI1 aparece com um x
vermelho, e tambm aparece uma pasta de Referenced_components, tambm com o x
vermelho. Isto acontece porque j parmetros obrigatrios no definidos em nosso componente.
Alm disso, este componente criado sobre outro componente (referenced), que um LDD
(Low-level Device Driver) para o timer. Alguns componentes exigem a configurao de seu LDD,
mas no geral a configurao do componente de mais alto nvel j configura o LDD, o que este
caso. Assim, tendo selecionado o componente TI1 e a aba de propriedades no Inspector, vamos
configur-lo. Podemos selecionar qual o timer a ser usado (periodic interrupt source), mas neste
caso vamos manter o que foi definido pelo PE. Em Interrupt period selecione 500ms, para que
o LED mude de estado a cada meio segundo, gerando assim um perodo de 1s. Pode-se
experimentar outros valores se desejado. Veja que ao se definir o perodo, os x vermelhos
desaparecem.

11

19. No vamos mexer na aba de Mtodos, pois o padro no gerar nenhuma funo, e elas no
sero necessrias. Pode-se, por exemplo, definir funes para habilitar e desabilitar a interrupo
peridica. Como nas propriedades est definido (por padro, podendo-se mudar o parmetro) que a
interrupo peridica habilitada na inicializao, estas funes no so necessrias.
20. Neste componente, vamos explorar a aba de Eventos. Um evento todo processo que pode ser
gerado pelo componente, geralmente uma interrupo. Vamos manter as opes padro, sabendo-se
que podem ser alteradas. Veja que o Event module name se chama Events. Isto significa que
ser criado um arquivo Events.c que conter a funo de tratamento dos eventos deste
componente. Veja ainda que ser gerado cdigo para a condio On Interrupt, ou seja, para o
tratamento da interrupo gerada pelo componente. No campo de Event procedure name temos
TI1_OnInterrupt, que o nome padro para esta funo (composto pelo nome do componente e
pelo tipo de evento).

21. Agora que temos todos os componentes definidos, precisamos fazer com que o PE crie o
cdigo. Para tanto, no painel de componentes, clique no boto que simboliza uma lista com uma
seta vermelha (Generate Processor Expert Code). Os cdigos-fonte de inicializao, dos mtodos e
das funes dos eventos sero gerados.

12

22. Aps a gerao do cdigo, o arquivo main.c permanece o mesmo. Veja que na pasta
Sources aparecem agora outros arquivos. O arquivo Events.c contm a funo de tratamento da
interrupo. D um duplo clique sobre ele para abri-lo no editor.
23. Na listagem, procure a funo TI1_OnInterrupt. Veja que ela est vazia, e h um comentrio
para que o usurio coloque seu cdigo ali. A nica coisa a ser feita por esta funo (a limpeza do
flag de interrupo feita automaticamente pelo cdigo gerado) chamar a funo NegVal do
componente LED (ou seja, LED_NegVal). Podemos simplesmente escrever LED_NegVal();
dentro da funo de tratamento, mas h um mtodo mais simples.

24. No painel dos componentes, expanda o componente LED. Voc ver todas as funes possveis
para este componente. Entre elas, est a NegVal. Clique sobre ela e arraste o cursor com o boto
apertado, arrastando a funo para dentro da funo TI1_OnInterrupt. Verifique se o cursor est
dentro da funo OnInterrupt antes de soltar o boto. Ao soltar, ser colocada a chamada da funo
LED_NegVal no local do cursor.

13

25. Pronto! J temos tudo o que precisamos para fazer o programa funcionar. Agora basta compilar
o projeto, carregar na placa e executar o programa, conforme j visto na apostila do CodeWarrior!

Revisado pelo Prof. Antonio Quevedo em 04/09/2014


As janelas apresentadas so de telas do CodeWarrior 10.4, executando em Windows XP, e do
odeWarrior 10.6, executado em Windows 7. Pequenas diferenas podem aparecer em futuras
verses do programa, e em outros sistemas operacionais.

14