Lab. Microprocessadores PCS2031 Curso Cooperativo 2. quadrimestre 2008. quinta-feira; a turma de sexta eh no dia seguinte. prof. Jorge Kinoshita. 08/5 1. Introdução microprocessadores (teórica) Instale e rode o simulador para o 68K. http://www.pcs.usp.br/~jkinoshi/micro/sim68k.txt 15/5 2. E1: Introdução à família 68x00 da Motorola http://www.pcs.usp.br/~jkinoshi/598e012001.pdf 22/5 Feriado 29/5 SEM AULA - Congresso USP 05/6 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). PLANEJAMENTO PARA ESSA E PRÓXIMAS EXPERIÊNCIAS: trazer os programas fontes para a aula impressos. Nessa experiência usaremos o microcomputador windows como um cliente do servidor linux. Os alunos William e Denis criaram um cdrom em 2005 baseado no kurumim que é bootado em uma máquina que passa a ser o servidor linux. 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! 12/6 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/2007/experiencia3-2005.doc 19/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 %G–%@ 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. 26/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 --------------------------------------------------------------------- 03/7 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 10/7 8. E7/3: programas concorrentes II http://www.pcs.usp.br/~jkinoshi/598e072002.doc 17/7 9. E8/1: Linux - Driver padrão. http://www.pcs.usp.br/~jkinoshi/2008/Exp8_revisada_13_08_07.doc 24/7 10. E9/2: Linux - Interface com display na paralela. http://www.pcs.usp.br/~jkinoshi/2007/2031e9.doc 31/8 11. P1/2: projeto final 1 07/8 12. P2/2 14/8 13. P3/2 Aprovação: (E2 + 2E3 + 2E4 + 3E5 + 3E6 + 3E7 + E8 + 2E9 + 6P)/23 Aulas Quinta 8:20-12:00H, 14:00-17:40H Sexta 14:00-17:40H Avaliação por experiência: - -1 atraso de 15 minutos - -4 atraso de 1 hora. Ao término de cada experiência enviar código para o professor. Possíveis temas para o Projeto Final - criar experiência: driver Linux para entrada de dados via paralela usando interrupção. Isso permite se criar equipamentos que se comunicam com o linux (ex: um alarme ligado na porta paralela). - driver minix para entrada de dados via paralela usando interrupção. - criar uma experiência: driver minix padrão. http://www.pcs.usp.br/~jkinoshi/2006/driverminix.doc - explica um driver para minix (serve de base para melhorar), mas faça para o minix3. - melhorar o CD linux usado no lab. (retirar interface gráfica e colocar samba para transferência de arquivos). Temos um CD desenvolvido no kurumim e seria legal ter um no ubuntu. - como usar o minix ou linux em um curso de laboratorio de microprocessadores (criar programas e debuga-lo passo a passo para se entender o pentium). Criar experiência como as experiências 1 e 2, mas no assembly do pentium - o labview da empresa national é muito interessante para se desenvolver equipamentos criando um novo hardware (talvez um novo chip). Podemos criar algo em cima do labview. Através do labview é possível se criar um projeto envolvendo desde a cpu até periféricos como conversor análogo digital. Poderia se desenvolver projetos específicos para controle de processos químicos, por exemplo. - simulador 68K em Linux (verificar possíveis simuladores na web, comparar e apresentar o melhor). - simulador 68K em Windows. Refazer experiências já feitas no lab., mas no simulador. - criar um sistema de segurança de baixo custo. Já existem câmeras vendidas no mercado nacional que podem se conectar direto na internet. Estudar as características de uma câmera assim e procurar criá-la usando o linux. Mostrar como isso pode ser feito - software e hardware necessários. É possível se conseguir uma câmera assim a um custo inferior ao de mercado? Verificar os preços. O projeto deve estar dividido em duas etapas: uma técnica (hardware, software, etc.) e outra financeira (os custos envolvidos) (você pode imaginar um projeto nesse estilo, proponha ao professor). - lxr - Existe um software que transforma um código fonte (grande) em várias páginas HTML criando links entre esses códigos. Na internet existe um código fonte do minix dessa forma, mas ele está incompleto. Alguém se habilita o usar o lxr (software que faz a cross referencia) para o minix?