Lab. Microprocessadores PCS2031 Curso Cooperativo prof. Jorge Kinoshita. 2. quadrimestre 2009. Esse calendário contém as datas referentes das aulas para as turma de quinta-feira. Para a turma de sexta, a aula ocorre no dia seguinte. Aulas Quinta 8:20-12:00H, 14:00-17:40H Sexta 14:00-17:40H 07/5 1. Introdução microprocessadores (teórica) Instale e rode o simulador para o 68K. http://www.pcs.usp.br/~jkinoshi/micro/sim68k.txt 14/5 2. E1: Introdução à família 68x00 da Motorola http://www.pcs.usp.br/~jkinoshi/598e012001.pdf 21/5 3. E2/1: Cross assembler - ASM68 http://www.pcs.usp.br/~jkinoshi/2007/e2linux2005.doc TRAZER: - apostila E2 impressa - código impresso do programa já testado no simulador (a menos de se ver a onda quadrada na paralela). A penalidade para a falta da apostila ou do programa impresso é de 1 ponto. PLANEJAMENTO PARA ESSA E PRÓXIMAS EXPERIÊNCIAS: trazer os programas fontes e apostilas para a aula impressos. Nessa experiência usaremos o microcomputador windows como um cliente do servidor linux. Os alunos William Cohen e Denis criaram um cdrom em 2005 baseado no kurumim que é bootado em uma máquina que passa a ser o servidor linux. Em 2007, a turma do Pedro Pedruzi criou um cdrom baseado no kurumin. A máquina não armazena nenhum programa dos alunos. Ela contém o cross compilador e montador que serão usados nas experiências. Você criará os programas na máquina linux e utilizará a máquina windows apenas para carregar o programa.srec no kit. Utilizem o winftp para se conectar no IP passado em aula e loguem como anonymous. Verifiquem o PATH da sua maquina Windows. Instale os programas putty.exe e winscp376.exe em algum diretório do path. O putty permitirá que você se conecte ao linux usando o ssh (dará uma tela do linux). O winscp376 permitirá que você transfira os arquivos entre o windows e o linux de forma segura. Para essa experiência e posteriores criem a pasta c:\pcs2031-quinta ou c:\pcs2031-sexta dependendo do dia da aula. Após a aula, deletem o conteúdo da pasta (mas deixem a pasta para ser usada por vocês nas próximas experiências). Como diretório local usem c:\pcs2031-quinta (ou sexta). Isto é, cuidado para não "sujarem" o windows com seus arquivos sendo espalhados em diversos diretórios. Nessa experiência e posteriores NUNCA coloque a ponta de prova do osciloscópio diretamente sobre kit para evitar um curto circuito nos conectores. Ao terminar, enviem o arquivo fonte, via email para o professor. Boa experiência! 28/5 4. E3/2: Interface com display (ASM) TRAZER: além da apostila impressa, o código do programa a ser testado em classe. http://www.pcs.usp.br/~jkinoshi/2009/experiencia3-2005.doc 4/6 5. E4/2: Cross compiler - C68 http://www.pcs.usp.br/~jkinoshi/2007/e4linux2005.doc TRAZER: código impresso do item a) + apostila impressa. a)Edite um simples programa para apenas apresentar a string "PCS2031" no display da alfacom com base no seu programa feito na experiência 3. O programa no Apêndice II é apenas um exemplo que funciona com um display antigo que não é da alfacom - e está sendo apresentado para se ter uma idéia do programa em C a ser criado. Editar, compilar, ligar/alocar, carregar e testar o seu programa. Para isso terão que escrever o código de inicialização do display e as rotinas que enviam dados e controle para o display. Imprimam esse código e tragam em aula. 11/6 - Feriado - Corpus Christi http://en.wikipedia.org/wiki/Corpus_Christi_(feast) 18/6 6. E5/3: Interrupção http://www.pcs.usp.br/~jkinoshi/2007/tomas5.doc Outras referências para consulta: http://www.pcs.usp.br/~jkinoshi/2005/e5-2005.doc http://www.pcs.usp.br/~jkinoshi/2005/e5roberto.doc PLANEJAMENTO A aula de interrupcoes eh uma das mais importantes de todo o curso de engenharia de computacao; mas muita gente vai ter muita duvida ao ler a apostila para a aula. Estou enviando um programa feito pela turma do Bruno do coop6 com o objetivo de ajudar o entendimento da apostila. O programa eh muito pequeno e basta rodah-lo no simulador em casa. Se tiverem duvidas sobre o simulador ide68k revejam a pagina da disciplina e usem o help do simulador. Assim, por favor, rodem esse programa no simulador antes da aula. Voces podem gerar as interrupcoes pelo simulador e ver o programa entrando na rotina de interrupcao. Observem como o PC é empilhado. Para o planejamento da proxima aula respondam as perguntas: a) Coloque o programa para rodar. Funciona bem? Veja como as interrupções foram liberadas (move #$0300,SR) e caso o programa não tenha funcionado, corrija-o. Observe que o programa libera a interrupçao antes que o ponteiro para handler da interrupcao esteja acertado no vetor de interrupcao; Voce ve problemas nisso? b) quando ocorre a interrupcao de relogio, referente aa interrupcao de nivel 4, qual rotina de interrupcao deve ser chamada? c) para que essa rotina de interrupcao seja chamada, eh necessario colocah-la no vetor de interrupcao. Qual instrucao faz isso? d) O que faz o programa principal? e) Assim que vc. entrar na rotina de interrupcao, observe a pilha. O que foi empilhado pelo hardware? f) O que faz a instrucao move #$0300,SR ? Retire ela do programa. Ele continua funcionando? Troque pela instrucao move #$0200,SR; o programa funciona? E agora troque por move #$0400,SR, o programa funciona? Explique. g) altere o codigo para usar a interrupcao autovetorada de nivel 3 (em INT3) ao inves da de nivel 4. Repita o item e) quais sao as respostas ? h) altere o codigo para que os leds pisquem numa frequencia correspondente aa metade da frequencia que estah no codigo. Apresente esse codigo ao professor rodando no comeco da aula. ------------------------------------------------------------- *Bruno Barbosa Viana 3725564 *Priscila Cardoso Ferreira 3725720 * revisao Jorge Kinoshita 2008 *INTERRUPCOES *Esse programa simula a experiencia 5 que gera uma onda quadrada na porta paralela *do kit do laboratorio atraves de interrupcoes geradas pelo timer. *Aqui, a porta paralela serah simulada pelos LEDS (habilitados no menu Peripherals) *e o dispositivo Interrupt Timer gerarah as interrupcoes de nivel 4 a cada intervalo de tempo. *Rode o programa no modo Run (Ctrl F5) e no Interrupt Timer, escolha o nivel 4 para Interrupcoes *e 1s para o intervalo. Isso farah com que os LEDS fiquem piscando em intervalos de 1s. INT1 equ $0064 level 1 autovector INT2 equ $0068 level 2 autovector INT3 equ $006C level 3 autovector INT4 equ $0070 level 4 autovector INT5 equ $0074 level 5 autovector INT6 equ $0078 level 6 autovector INT7 equ $007C level 7 autovector LEDS equ $E003 LEDS sao mapeados na memoria no endereco E003(hex) ON equ $FF OFF equ $00 org $10000 org $1000 estah em uma area onde soh roda como supervisor * Program starts here prog move #$0300,SR habilita interrupcoe de nivel 4 ou maior move.l #stack,SP inicia SP move.l #int4proc,INT4 coloca o end da rotina de interrupcoes no vetor de interrupcoes move.b #ON,LEDS liga LEDS loop bra loop aguarda interrupcao * Rotina de tratamento de interrupcoes de nivel 4 int4proc cmp.b #ON,LEDS verifica se LEDS estao ligados beq desliga se sim, desliga-os move.b #ON,LEDS se nao, liga-os rte desliga move.b #OFF,LEDS rte * User stack ds.w 64 stack area (128 bytes) stack equ * end prog --------------------------------------------------------------------- 25/6 7. E6/3: programas concorrentes I http://www.pcs.usp.br/~jkinoshi/2007/598E062001.doc PLANEJAMENTO para a experiência 6 - protótipo de um sistema multi-tarefa. Pessoal, A experiência 6 é a mais difícil do laboratório e a taxa de fracasso em anos anteriores tem sido alta por diversos motivos: - a experiência requer muita atenção. - os alunos estão envolvidos na entrega de muitos trabalhos e deixam uma experiência muito importante em segundo plano. Mas estou torcendo para que essa turma seja diferente e apresente uma alta taxa de sucesso. Para isso peço como planejamento: 1. Leiam a apostila da experiência: http://www.pcs.usp.br/~jkinoshi/2008/598E062001.doc. 2. Criem o código em assembly no simulador que faça o chaveamento dos dois "processos" bem simples que apenas alteram os leds no display. Ex: Processo 1: loop que continuamente acende apenas o led zero deixando os outros apagados. Processo 2: loop que continuamente acente o led um deixando os outros apagados. Ao chavear os processos 1 e 2 usando a interrupção de relógio os leds devem piscar. Não se esqueça: a rotina de interrupção deve trocar o endereço de retorno na pilha do supervisor antes que a instrução RTE seja executada para que ocorra o chaveamento dos processos. Pedimos que o programa seja escrito em assembly para que se tenha um controle maior do que ocorre com a pilha. Funções escritas em C alteram a pilha e isso depende do compilador. Ao lidar com a pilha em C, o aluno tende a cometer muitos erros. 3. Testem o código em casa no simulador. 4. Tragam o código para a aula impresso. 5. Apresentem o código funcionando ao professor. Tenho certeza de que se fizerem um bom planejamento, o programa funcionará em aula. Estou descontando 3 pontos para grupos sem planejamento (essa experiência tem peso alto). boa sorte 2/7 8. E7/3: programas concorrentes II http://www.pcs.usp.br/~jkinoshi/598e072002.doc 9/7 Feriado: Revolução Constitucionalista http://pt.wikipedia.org/wiki/Revolução_Constitucionalista_de_1932 16/7 9. E8/2: Programas Concorrentes III ou uma experiência com ARM, provavelmente baseada em http://www.zap.org.au/elec2041-cdrom/unsw/elec2041/ 23/7 10. E9/1: Linux - Driver padrão. http://www.pcs.usp.br/~jkinoshi/2008/Exp8_revisada_13_08_07.doc 30/7 11. E10/2: Linux - Interface com display na paralela. http://www.pcs.usp.br/~jkinoshi/2007/2031e9.doc 6,13,20/8 Projeto final Aprovação: (E2 + 2E3 + 2E4 + 3E5 + 3E6 + 3E7 + 2E8 + E9 + 2E10 + 6P)/25 Avaliação por experiência: - Penalidade = -1 por atraso de 15 minutos - Penalidade = -4 por atraso de 1 hora. Ao término de cada experiência enviar código para o professor. Possíveis temas para o Projeto Final Propostas para projetos de lab. micro Existem 14 equipes no lab. de microprocessadores. O grande objetivo é criar novas experiências usando o ARM. Teremos 3 semanas para isso. O kit evaluator7t acompanha um CD com exemplos que rodam no codewarrior. Vamos usar um pouco de criatividade para criar experiências para o kit se baseando nesses códigos. Os exemplos são: 1) 7segment - apresenta uma sequencia de números no display de 7 segmentos. -> Bruno, Marcio. Com certeza. --- Alex, Alencar, Robert 2) dips/ - mostra como ler a chavinha do kit. Isso pode ser combinado com a experiencia do display - fazendo, por exemplo que ele passe a contar ou pare de contar. --> Alisson, Fre e Keila 3) mutex/ - mostra como processos são chaveados através da interrupcao de relógio. Além disso mostra como os processos podem se sincronizar usando mutex_lock. -> Pedro Victor, Leandro, Tarik 4) pascal/ - Apresenta o triangulo de pascal no terminal usando a serial. --> Bruno Maeda, Henrique Zambon, Fernando Takagi 5) serial/ - mostra como o kit se comunica via serial. -> Andre Diniz, Danilo, Thiago Bosco --> André Kido, Helio Nagamachi Thiago Koji (ainda em duvida) 6) SWI/ - mostra como interceptar SW interrupts. ---> Leonardo, Paulo --- Jorge , Alexandre -> Russo, Rafael - em duvida. 7) switch/ - gera uma interrupcao toda vez que um botao eh apertado no kit. -> Rafael, Thiago. --> Erico, Rafael, Filipe. 8) traffic/ - mostra o kit lidando com duas interrupcoes - o botao e a do timer. -> Bruno, Bruno, Fernando. -- Ricardo Joao Bruno Paschoal.