Você está na página 1de 6

Examen Parcial Procesadores Digitales de Seales

Problema 1
Hacer un programa que permita usar los bits 8-15 del puerto B como salidas y poner el nmero 145 en binario si el bit 4 del puerto A tiene conectado una seal alta y si tiene una seal baja el nmero 67. Hacer el diagrama electrnico si se conecta a los leds para ver el resultado y un switch para cambiar el estado del pin a del puerto A. Para el diseo del diagrama electrnico, considerar la ubicacin de los pines de la tarjeta DSP. (6 puntos) Solucin: void main(){ DINT; DRTM; InitSysCtrl(); InitPieCtrl(); IER=0x0000; IFR=0x0000; EALLOW; //Puerto A tipo I/O GpioMuxRegs.GPAMUX.all=0x000; GpioMuxRegs.GPAMUX.all=0x000; //Puerto B tipo I/O GpioMuxRegs.GPADIR.bit.GPIOA4=0; //Entrada digital GpioMuxRegs.GPBDIR.all=0xFF00; //Puerto B 8 - 15 como salida digital EDIS; while(1) { if(GpioDataRegs.GPADAT.bit.GPIOA4==0) {GpioDataRegs.GPBDAT.all=67; } else{if(GpioDataRegs.GPADAT.bit.GPIOA4==0); // Si A4 es cero GpioDataRegs.GPBDAT.all=145; } } }

Diagrama elctrico:

Problema 2
Se requiere hacer un circuito electrnico que genere un voltaje analgico de 0 a 20 voltios desde un valor digital de 16 bits. Hacer el diseo electrnico., seleccionar las salidas del DSP que utilizaran para generar la seal y hacer el programa en C. (6 puntos) Solucin: int voltaje; void iniciar_timer1( ); void main( ){ DINT; DRTM; InitSysCtrl(); InitPieCtrl(); IER=0x0000; IFR=0x0000; EALLOW; //Valor de 16 bits del voltaje que se quiere generar

GpioMuxRegs.GPAMUX.T1_PWM_GPIOA6 = 1; //TIMER 1 COMO PWM iniciar_timer1(); while(1) { voltaje=0x4F30; //Valor del voltaje de 16 bits que se quiere generar EvaRegs.T1CMPR=voltaje; } } void iniciar_timer1( ) { EvaRegs.T1PER=0xFFFF; EvaRegs.T1CMPR=voltaje; // Registro de comparacin para generar el duty del PWM EvaRegs.T1CNT=0; EvaRegs.T1CON.all=0x9702; asm( nop); asm( nop); EvaRegs.T1CON.all=0x9742; EvaRegs.EXTCONA.all=0x0001; EvaRegs.GPTCONA.all=0x007A; // PWM tipo activo alto EvaRegs.GPTCONA.T1PIN=2; }

Problema 3
Hacer un programa en C para configurar el timer de propsito general 3 para que se desborde en 5678 cuentas en un rgimen de conteo continuo ascendente. (2 puntos) Solucin: void configurar_timer3( ); void main( ){ DINT; DRTM; InitSysCtrl(); InitPieCtrl(); IER=0x0000; IFR=0x0000; EALLOW; EDIS; configurar_timer3(); } void configurar_timer3( ) { EvbRegs.T3PER=5678; EvbRegs.T3CON.all=0x9702; EvbRegs.T3CON.TMODE=2; asm( nop); asm( nop); EvbRegs.T3CON.all=0x9742; EvbRegs.EXTCONA.all=0x0001; EvbRegs.GPTCONA.all=0x007A; }

//Desborda en 5678 cuentas //Modo continuo ascendente

Problema 4
Hacer un programa para configurar el DSP para que reaccione a interrupciones en el nivel 2 y el nivel 4 de interrupciones. (2 puntos) Solucin: void main( ){ DINT; DRTM; InitSysCtrl();

InitPieCtrl(); IER=0x0000; IFR=0x0000; EALLOW; EDIS; PieCtrlRegs.PIEIER2.all = 0xFFFF; PieCtrlRegs.PIEIER4.all = 0xFFFF; IER=IER|M_INT2|M_INT4; EINT; ERTM;
}

//Habilitamos todas las interrupciones del nivel 2 //Habilitamos todas las interrupciones del nivel 4 //Habilitamos las interrupciones del nivel 2 y 4

Problema 5
Hacer un programa que genere un tiempo de muestreo con el timer de propsito general 1 configurable a travs de una variable e indicar en donde se debe programar el controlador del sistema. (4 puntos) Solucin: void iniciar_timer1( ); interrupt void interrupcion_timer1_muestreo( ); void main( ){ int tiempomuestreo; DINT; DRTM; InitSysCtrl(); InitPieCtrl(); IER = 0x0000; // Deshabilitamos interrupciones IFR = 0x0000; // Ponemos todos los flag a 0 InitPieVectTable(); // Inicia la tabla de interrupciones EALLOW; PieVectTable.T2PINT = &interrupcion_timer1_muestreo; EDIS; PieCtrlRegs.PIEIER2.all = M_INT3; // Habilitamos la interrupcin T1PINT IER = IER | M_INT2; // Habilitamos el nivel de de las interrupciones iniciar_timer1(); // Iniciamos timer 1 para generar tiempo de muestreo EINT; ERTM; while(1) { } }

void iniciar_timer1() { EvaRegs.T1PR = tiempomuestreo; // Registro de periodo para configurar el tiempo de muestreo EvaRegs.EVAIMRA.bit.T1PINT = 1; // Se habilita la interrupcin del Timer2 por periodo EvaRegs.EVAIFRA.bit.T1PINT = 1; // Se resetea el flag de la interrupcion Timer2 por periodo EvaRegs.T1CNT = 0x0000; // Se reinicia el contador a 0 EvaRegs.T1CON.all = 0x9702; //(75MHz/4) asm(" nop"); asm(" nop"); EvaRegs.T1CON.all = 0x9742; EvaRegs.GPTCONA.all = 0x007A; EvaRegs.GPTCONA.bit.T1TOADC = 2; // El flag de la interrupcion por periodo T1PER inicia la conversion ADC EvaRegs.GPTCONA.bit.T1PIN =2; // Tipo activo alto } interrupt void interrupcion_timer1_muestreo( ) { // *********************************************************************************** // AQU SE PROGRAMA EL CONTROLADOR DEL SISTEMA // *********************************************************************************** EvaRegs.EVAIMRA.bit.T1PINT = 1; // Se habilita la interrupcion EvaRegs.EVAIFRA.bit.T1PINT = 1; // Se resetea el flag de la interrupcion PieCtrlRegs.PIEACK.all = PIEACK_GROUP2; }

Você também pode gostar