Você está na página 1de 3

Lista de exerccios 2 - Microcontroladores 2 1) Determine os valores de APBDIV, T1PR e T2PR, de modo que TC1 e TC2 incrementem suas contagens

a cada 38,4ms e 12,8ms. Quais sero os valores mximos de temporizao em segundos de TC1 e TC2? CCLK = 12 MHz APBDIV = 0x00; //PCLK = CCLK/4 -> 12MHz/4 = 3MHz PCLK = 3 MHz -> 333,333 ns TC1 = 38,4 ms 38,4 ms/333,333 ns = 115200 T1PR = 115200 - 1; TC2 = 12,8 ms 12,8 ms/333,333 ns = 38400 T2PR = 38400 - 1; TC1 -> 32 bits Valor mximo de TC1 = 2^32 - 1 = 4294967295 Temporizao mxima = 4294967295 x 38,4 ms Temporizao mxima = 164926744,2 s TC2 -> 16 bits Valor mximo de TC1 = 2^16 - 1 = 65535 Temporizao mxima = 65535 x 12,8 ms Temporizao mxima = 838,848 s

2) //PWM com frequncia de 2kHz e ciclos de trabalho de 25% e 80%, respectivamente. APBDIV = 0; T0TCR = 0x02; T0CTCR = 0; T0PR = 50 - 1; PWM0CON = 0x3; PINSEL0 = 0x880; T0MR0 = 4; T0MR1 = 15; T0MR3 = 20 - 1; T0MCR = 0X400; //PCLK = CCLK/4 = 8M/4 -> PCLK = 2MHz //TC desabilitado e resetado //Modo Temporizador //2MHz/50 -> Clock T0 = 40KHz (25 us) //Pwm habilitado para MAT0.0 e MAT0.1 //Respectivas sadas so selecionadas como MAT0.0 e MAT0.1 //25us x 4 = 100 us -> Tempo em baixo do PWM 80% (MAT0.0 -> MR0) //25us x 15 = 375 us -> Tempo em baixo do PWM 25% (MAT0.1 -> MR1) //25us x 20 = 500 us -> Perodo de ambos PWMs //Reseta o timer quando a contagem chegar ao valor de T0MR3

//T0EMR = 0x3; -> no precisa fazer nada no EMR para fazer o PWM, ento no precisa disso IODIR = 0xFFFFFFFF; //Tudo sada (preguia de ver qual pino so os MATs) T0TCR = 1; //Dispara temporizao

3)Gerar interrupes IRQ peridicas de 1 segundo, apresentando uma contagem binria nos LEDs #include <intrinsics.h> #include <NXP/iolpc2103.h> char global = 0; __irq __arm void IRQ_Handler() //funo chamada quando ocorre interrupo { global++; EXTINT = 1; //limpa flag de interrupo } void main() { __disable_interrupt(); //Desabilita todas interrupes APBDIV = 0; IODIR = 0xFF00; T1TCR = 0x02; T1PR = 5000 - 1; T1CTCR = 0; T1MCR = 0x3; resetado T1MR0 = 1000 - 1; __enable_irq(); //5MHz como PCLK //Leds como sada //Reset e disable no timer 1 //5M/5k -> 1kHz como clock do timer //Modo Timer //Ser gerada uma interrupo quando T1 for igual a MR0, e T1 ser //O tempo de amostragem ser 1 s (1000 x 1ms) //Habilita interrupes do tipo IRQ //Habilita interrupo do Timer 1 //biblioteca contendo as funes de enable e disable interrupt

VICIntEnable = 0x20; T1TCR = 1;

//Dispara temporizao //Valor da contagem jogada continuamente nos Leds

while(1){ IOPIN = global << 8; } return; }

4) Sim, possvel executar um programa que utiliza interrupes na RAM. Entretanto, no possvel simular interrupes com remapeamento em RAM no ambiente de desenvolvimento IAR EWARM. Alm de alterar as regies de memria (intvec_start, ROM_start, ROM_end, RAM_start, RAM_end) no arquivo .icf, deve-se alterar o valor do registrador MEMMAP para 0x2, indicando que os vetores de interrupo se encontram na RAM.

5) #include <NXP/iolpc2103.h> void main() { int resultado = 0; PINSEL1 = 0x3000; APBDIV = 0x01;

// P0.22 funciona como AD0.0 // clock 20MHz (PCLK)

while (1) { AD0CR = 0x01200401; // bit 7:0 -> 00000001 = seleciona qual AD ser usado (AD0.1) // bit 15:8 -> 00000100 = determina clock do AD (deve ser <= 4,5Mhz). Divide o PCLK //por valor+1 = Clock AD = 20M/(4+1) Clock AD = 4MHz // bit 16 -> 0 = converso controlada por software (e requer 11 clocks XD) // bit 19:17 -> 000 = nmero de clocks e bits do resultado (000 = 11 clocks/10 bits) // bit 20 -> 0 = reservado "don't touch this" // bit 21 -> 1 = o conversor AD est ligado // bit 23:22 -> 00 = reservado // bit 26:24 -> 001 = comea a converso agora // bit 27 -> 0 = converso comea na borda de descida (no importa por software) // bit 31:28 -> 0000 = reservado while ((ADDR0 & 0x80000000) != 0x80000000); // espera flag DONE ser 1 (bit 31) resultado = (ADDR & 0xFFC0) >> 6; os bits necessrios void envia_resultado(resultado); } } 0,6V x 3 = 1,8V Valor digital = 1,8/[3,3/(2^10 - 1)] = 558 ou 0x22E //recebe valor da converso, pegando somente

//envia pela serial

Você também pode gostar