dsp
TRANSCRIPT
![Page 1: Dsp](https://reader031.vdocuments.us/reader031/viewer/2022020417/55cf94b9550346f57ba3ff46/html5/thumbnails/1.jpg)
LABORATORIO 1
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
#include "math.h"
#include "lab1.h"
float salida[1000]; //variable de salida
longint k=0; //muestra k
float T=0; //periodo de muestreo
constfloat pi=3.1415926535897932384;
float w=0; //velocidad angular en rad/seg
float t=0; //variable de entrada o tiempo
main(void)
{
DINT; //deshabilita interrupciones
DRTM; //deshabilita interrupciones real time mode
InitSysCtrl(); //inicializa el sistema como PLL,clocks,watchdog
InitPieCtrl(); //inicializa el apoyo de interrupción de periféricos
IER = 0x0000; //limpia máscara de interrupciones
IFR = 0x0000; //limpia bandera de interrupciones
InitPieVectTable(); //inicializa tabla de interrupciones por defecto
EINT; //habilita interrupciones
ERTM;
T=0.001; //carga el periodo de muestreo =1KHz
w=2*pi*10; //carga la velocidad angular
for (k=0;k<1000;k++)
{
t=k*T;
salida[k]=func_coseno(w*t);
};
}
floatfunc_coseno(float angulo)
{
return 100*cos(angulo);
}
LABORATORIO 2
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
#include "lab2.h"
longinti,k,l;
longintretardo=5000000;
longint test=0; // Variable parabuscarerrores
voidmain(void) {
DINT; //deshabilita interrupciones
DRTM; //deshabilita interrupciones real time mode
InitSysCtrl(); //inicializa el sistema como PLL,clocks,watcgdog
InitPieCtrl(); //inicializa el apoyo de interrupción de periféricos
IER = 0x0000; //limpia máscara de interrupciones
IFR = 0x0000; //limpia bandera de interrupciones
InitPieVectTable(); //inicializa tabla de interrupciones por defecto
EINT; //habilita interrupciones
ERTM;
EALLOW;
//Pull up y Multiplexor de los pines
GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0; // Habilitar pullup en GPIO0
GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0; // Habilitar pullup en GPIO1
GpioCtrlRegs.GPAPUD.bit.GPIO2 = 0; // Habilitar pullup en GPIO2
GpioCtrlRegs.GPAPUD.bit.GPIO3 = 0; // Habilitar pullup en GPIO3
GpioCtrlRegs.GPAPUD.bit.GPIO4 = 0; // Habilitar pullup en GPIO4
GpioCtrlRegs.GPAPUD.bit.GPIO5 = 0; // Habilitar pullup en GPIO5
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // GPIO0 = GPIO0
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0; // GPIO1 = GPIO1
GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 1; // GPIO2 = PWM2A
GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 2; // GPIO3 = ECAP5
GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 0; // GPIO4 = GPIO4
GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 3; // GPIO5 = ECAP1
GpioCtrlRegs.GPBMUX1.bit.GPIO32 = 0;
// Habilitar un GPIO como salida en el GPIO6, usar el "set" para puesta a uno
GpioCtrlRegs.GPAPUD.bit.GPIO6 = 0; // Habilitar pullup en GPIO6
GpioDataRegs.GPASET.bit.GPIO6 = 1; // cargar latch de salida = 1
GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0; // GPIO6 = GPIO6
![Page 2: Dsp](https://reader031.vdocuments.us/reader031/viewer/2022020417/55cf94b9550346f57ba3ff46/html5/thumbnails/2.jpg)
GpioCtrlRegs.GPADIR.bit.GPIO6 = 1; // GPIO6 = es salida
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
#include "lab2.h"
longinti,k,l;
longintretardo=5000000;
longint test=0; // Variable parabuscarerrores
voidmain(void) {
DINT; //deshabilita interrupciones
DRTM; //deshabilita interrupciones real time mode
InitSysCtrl(); //inicializa el sistema como PLL,clocks,watcgdog
InitPieCtrl(); //inicializa el apoyo de interrupción de periféricos
IER = 0x0000; //limpia máscara de interrupciones
IFR = 0x0000; //limpia bandera de interrupciones
InitPieVectTable(); //inicializa tabla de interrupciones por defecto
EINT; //habilita interrupciones
ERTM;
EALLOW;
//Pull up y Multiplexor de los pines
GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0; // Habilitar pullup en GPIO0
GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0; // Habilitar pullup en GPIO1
GpioCtrlRegs.GPAPUD.bit.GPIO2 = 0; // Habilitar pullup en GPIO2
GpioCtrlRegs.GPAPUD.bit.GPIO3 = 0; // Habilitar pullup en GPIO3
GpioCtrlRegs.GPAPUD.bit.GPIO4 = 0; // Habilitar pullup en GPIO4
GpioCtrlRegs.GPAPUD.bit.GPIO5 = 0; // Habilitar pullup en GPIO5
GpioCtrlRegs.GPAPUD.bit.GPIO6 = 0; // Habilitar pullup en GPIO6
GpioCtrlRegs.GPAPUD.bit.GPIO7 = 0; // Habilitar pullup en GPIO7
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // GPIO0 = GPIO0
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0; // GPIO1 = GPIO1
GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 0; // GPIO2 = GPIO2
GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 0; // GPIO3 = GPIO3
GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 0; // GPIO4 = GPIO4
GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 0; // GPIO5 = GPIO5
GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0; // GPIO6 = GPIO6
GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0; // GPIO7 = GPIO7
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
#include "lab2.h"
longinti,k,l;
longintretardo=5000000;
longint test=0; // Variable parabuscarerrores
voidmain(void) {
DINT; //deshabilita interrupciones
DRTM; //deshabilita interrupciones real time mode
InitSysCtrl(); //inicializa el sistema como PLL,clocks,watcgdog
InitPieCtrl(); //inicializa el apoyo de interrupción de periféricos
IER = 0x0000; //limpia máscara de interrupciones
IFR = 0x0000; //limpia bandera de interrupciones
InitPieVectTable(); //inicializa tabla de interrupciones por defecto
EINT; //habilita interrupciones
ERTM;
EALLOW;
//Pull up y Multiplexor de los pines
GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0; // Habilitar pullup en GPIO0
GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0; // Habilitar pullup en GPIO1
GpioCtrlRegs.GPAPUD.bit.GPIO2 = 0; // Habilitar pullup en GPIO2
GpioCtrlRegs.GPAPUD.bit.GPIO3 = 0; // Habilitar pullup en GPIO3
GpioCtrlRegs.GPAPUD.bit.GPIO4 = 0; // Habilitar pullup en GPIO4
GpioCtrlRegs.GPAPUD.bit.GPIO5 = 0; // Habilitar pullup en GPIO5
GpioCtrlRegs.GPAPUD.bit.GPIO6 = 0; // Habilitar pullup en GPIO6
GpioCtrlRegs.GPAPUD.bit.GPIO7 = 0; // Habilitar pullup en GPIO7
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // GPIO0 = GPIO0
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0; // GPIO1 = GPIO1
GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 0; // GPIO2 = GPIO2
GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 0; // GPIO3 = GPIO3
GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 0; // GPIO4 = GPIO4
GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 0; // GPIO5 = GPIO5
GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0; // GPIO6 = GPIO6
GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0; // GPIO7 = GPIO7
while(1){
for (i=0;i<60;i++){ //Los retardo son proporcionales a la velocidad de la memoria
GpioDataRegs.GPBTOGGLE.bit.GPIO0 = 1; // Modificar alternando
estado de GPIO0
![Page 3: Dsp](https://reader031.vdocuments.us/reader031/viewer/2022020417/55cf94b9550346f57ba3ff46/html5/thumbnails/3.jpg)
for (k=0;k<retardo;k++); // bloque de retardo
GpioDataRegs.GPBTOGGLE.bit.GPIO0 = 1; // Modificar alternando
estado de GPIO0
GpioDataRegs.GPBTOGGLE.bit.GPIO1 = 1; // Modificar alternando
estado de GPIO1
for (k=0;k<retardo;k++); // bloque de retardo
GpioDataRegs.GPBTOGGLE.bit.GPIO1 = 1; // Modificar alternando
estado de GPIO1
GpioDataRegs.GPBTOGGLE.bit.GPIO2 = 1; // Modificar alternando
estado de GPIO2
for (k=0;k<retardo;k++); // bloque de retardo
GpioDataRegs.GPBTOGGLE.bit.GPIO2 = 1; // Modificar alternando
estado de GPIO2
GpioDataRegs.GPBTOGGLE.bit.GPIO3 = 1; // Modificar alternando
estado de GPIO3
for (k=0;k<retardo;k++); // bloque de retardo
GpioDataRegs.GPBTOGGLE.bit.GPIO3 = 1; // Modificar alternando
estado de GPIO3
GpioDataRegs.GPCTOGGLE.bit.GPIO4 = 1; // Modificar alternando
estado de GPIO4
for (k=0;k<retardo;k++); // bloque de retardo
GpioDataRegs.GPCTOGGLE.bit.GPIO4 = 1; // Modificar alternando
estado de GPIO4
GpioDataRegs.GPCTOGGLE.bit.GPIO5 = 1; // Modificar alternando
estado de GPIO5
for (k=0;k<retardo;k++); // bloque de retardo
GpioDataRegs.GPCTOGGLE.bit.GPIO5 = 1; // Modificar alternando
estado de GPIO5
GpioDataRegs.GPCTOGGLE.bit.GPIO6 = 1; // Modificar alternando
estado de GPIO6
for (k=0;k<retardo;k++); // bloque de retardo
GpioDataRegs.GPCTOGGLE.bit.GPIO6 = 1; // Modificar alternando
estado de GPIO6
GpioDataRegs.GPCTOGGLE.bit.GPIO7 = 1; // Modificar alternando
estado de GPIO7
for (k=0;k<retardo;k++); // bloque de retardo
GpioDataRegs.GPCTOGGLE.bit.GPIO7 = 1; // Modificar alternando
estado de GPIO7
GpioDataRegs.GPCTOGGLE.bit.GPIO6 = 1; // Modificar alternando
estado de GPIO6
for (k=0;k<retardo;k++); // bloque de retardo
GpioDataRegs.GPCTOGGLE.bit.GPIO6 = 1; // Modificar alternando
estado de GPIO6
GpioDataRegs.GPCTOGGLE.bit.GPIO5 = 1; // Modificar alternando
estado de GPIO5
for (k=0;k<retardo;k++); // bloque de retardo
GpioDataRegs.GPCTOGGLE.bit.GPIO5 = 1; // Modificar alternando
estado de GPIO5
GpioDataRegs.GPCTOGGLE.bit.GPIO4 = 1; // Modificar alternando
estado de GPIO4
for (k=0;k<retardo;k++); // bloque de retardo
GpioDataRegs.GPCTOGGLE.bit.GPIO4 = 1; // Modificar alternando
estado de GPIO4
GpioDataRegs.GPBTOGGLE.bit.GPIO3 = 1; // Modificar alternando
estado de GPIO3
for (k=0;k<retardo;k++); // bloque de retardo
GpioDataRegs.GPBTOGGLE.bit.GPIO3 = 1; // Modificar alternando
estado de GPIO3
GpioDataRegs.GPBTOGGLE.bit.GPIO2 = 1; // Modificar alternando
estado de GPIO2
for (k=0;k<retardo;k++); // bloque de retardo
GpioDataRegs.GPBTOGGLE.bit.GPIO2 = 1; // Modificar alternando
estado de GPIO2
GpioDataRegs.GPBTOGGLE.bit.GPIO1 = 1; // Modificar alternando
estado de GPIO1
for (k=0;k<retardo;k++); // bloque de retardo
GpioDataRegs.GPBTOGGLE.bit.GPIO0 = 1; // Modificar alternando
estado de GPIO0
}
}
}
LABORATORIO 3
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
#include "lab3.h"
#include "monitorF28335.h"
voidmain(void)
{
DINT; //deshabilita interrupciones
DRTM; //deshabilita interrupciones real time mode
InitSysCtrl(); //inicializa el sistema como PLL,clocks,watcgdog
InitSciaGpio(); // inicializa los pines scia para ser usados con su función sci
InitPieCtrl(); //inicializa el apoyo de interrupción de periféricos
IER = 0x0000; //limpia máscara de interrupciones
IFR = 0x0000; //limpia bandera de interrupciones
![Page 4: Dsp](https://reader031.vdocuments.us/reader031/viewer/2022020417/55cf94b9550346f57ba3ff46/html5/thumbnails/4.jpg)
InitPieVectTable(); //inicializa tabla de interrupciones por defecto
EINT; //habilita interrupciones
ERTM;
IniciarSerial(); //Inicialización de los parámetros del puerto serial A
do{ //hacer loop por lo menos una vez
IteraSerial(); //Rutina de espera del puerto serial
}while(1); //Itera infinitamente
}
MONITOR
#include "stdlib.h"
#include "DSP2833x_Device.h"
#include "monitorF28335.h"
const float mipi=3.1415926535897932384626433832795;
Uint16 LoopCount;
Uint16 SendChar;
Uint16 ReceivedChar;
voidAddrCant(void);
Uint32 Direccion=0;
int16 *memoria=0;
Uint32 Cantidad=0;
int caso=0;
Uint32 j=0;
voidIniciarSerial(void)
{
scia_fifo_init(); // Inicializa el FIFO del SCI
scia_init(); // Inicializa el lazo de iteración
SendChar = 0;
}
voidIteraSerial(void)
{
while(SciaRegs.SCIFFRX.bit.RXFFST ==0) {
return;
}; // espera por XRDY =1
ReceivedChar = SciaRegs.SCIRXBUF.all; //se lee el byte
SendChar=ReceivedChar; //se guarda en una variable
scia_xmit(SendChar); //se retransmite como ECO para que la PC sepa
caso=ReceivedChar; // se decodifica
switch (caso) { // con el CASE
case 0:
LeerDSP(); // Si el comando es un CERO Leer DSP
break;
case 1:
LeerDSP();
break;
case 2:
LeerDSP();
break;
case 3:
EscribirDSP(); // Si el comando es un TRES Escribir DSP
break;
case 4:
EscribirDSP();
break;
case 5:
EscribirDSP();
break;
};
}
voidLeerDSP(void)
{
AddrCant(); //Averiguar la Dirección de memoria y cuantos datos
for (j=0;j<Cantidad+1;j++)
{
memoria=0;
SendChar=memoria[Direccion]; // Buscar el dato en memoria
Direccion++;
do{
while(SciaRegs.SCIFFRX.bit.RXFFST ==0) { } // esperar a XRDY =1 estado
listo
ReceivedChar = SciaRegs.SCIRXBUF.all; //Leer byte del buffer
} while (ReceivedChar!=0x40); // Esperar a que sea el byte 64
scia_xmit(SendChar>>8); //Enviar parte alta del dato
do{
![Page 5: Dsp](https://reader031.vdocuments.us/reader031/viewer/2022020417/55cf94b9550346f57ba3ff46/html5/thumbnails/5.jpg)
while(SciaRegs.SCIFFRX.bit.RXFFST ==0) { } // esperar a XRDY =1 estado
listo
ReceivedChar = SciaRegs.SCIRXBUF.all;
} while (ReceivedChar!=0x40); // Esperar a que sea el byte 64
scia_xmit(SendChar); //Enviar parte baja del dato
};
}
voidEscribirDSP(void)
{
AddrCant();
for (j=0;j<Cantidad+1;j++) // Preparar la cantidad de veces
{
while(SciaRegs.SCIFFRX.bit.RXFFST ==0) { } // esperar a XRDY =1 estado
listo
ReceivedChar = SciaRegs.SCIRXBUF.all; //Leer byte del buffer
scia_xmit(ReceivedChar); // Enviar ECO
SendChar = ReceivedChar<<8; // Sube el valor recibido a la parte alta
while(SciaRegs.SCIFFRX.bit.RXFFST ==0) { } // esperar a XRDY =1 estado
listo
ReceivedChar = SciaRegs.SCIRXBUF.all; //Leer byte del buffer
scia_xmit(ReceivedChar); // Enviar ECO
SendChar = SendChar+ ReceivedChar; // Agrega parte baja del dato
memoria[Direccion]=SendChar; // Graba el valor del dato en memoria
Direccion++; // Incrementa para la próxima dirección
};
}
voidscia_init()
{
SciaRegs.SCICCR.all =0x0007; // 1 stop bit, No loopback
// No parity,8char bits,
// modo asíncrono, protocolo idle-line línea en espera
SciaRegs.SCICCR.bit.SCICHAR = 7;
SciaRegs.SCICTL1.all =0x0003; // Habilitar TX, RX, SCICLK interno,
// Deshabilitar RX ERR, SLEEP, TXWAKE
SciaRegs.SCICTL2.all =0x0003;
SciaRegs.SCICTL2.bit.TXINTENA = 0;
SciaRegs.SCICTL2.bit.RXBKINTENA =1;
SciaRegs.SCIHBAUD =0x0000;
SciaRegs.SCILBAUD =0x0028; //a 150mhz
SciaRegs.SCICCR.bit.LOOPBKENA =0; // No habilitar loop back
SciaRegs.SCICTL1.all =0x0023; // SCI fuera de Reset
}
voidscia_xmit(int a)
{
SciaRegs.SCITXBUF=a; // Cargar buffer para transmitir
}
voidscia_fifo_init()
{
SciaRegs.SCIFFTX.all=0xE040;
SciaRegs.SCIFFRX.all=0x204f;
SciaRegs.SCIFFCT.all=0x0;
}
voidAddrCant(void)
{
inti=0;
Direccion=0;
ReceivedChar=0;
for (i=0;i<4;i++)
{
while(SciaRegs.SCIFFRX.bit.RXFFST ==0) { } // esperar a XRDY =1 estado
listo
ReceivedChar = SciaRegs.SCIRXBUF.all; //Leer byte del buffer
scia_xmit(ReceivedChar);// Enviar ECO
Direccion=(Direccion<<8)+ReceivedChar; // Ir agregando Dirección
};
for (i=0;i<4;i++)
{
while(SciaRegs.SCIFFRX.bit.RXFFST ==0) { } // esperar a XRDY =1 estado
listo
ReceivedChar = SciaRegs.SCIRXBUF.all; //Leer byte del buffer
scia_xmit(ReceivedChar);// Enviar ECO
Cantidad=(Cantidad<<8)+ReceivedChar; // Ir agregando Cantidad
};
}
![Page 6: Dsp](https://reader031.vdocuments.us/reader031/viewer/2022020417/55cf94b9550346f57ba3ff46/html5/thumbnails/6.jpg)
LABORATORIO 4
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
#include "lab4.h"
#include "monitorF28335.h"
#define ADC_MODCLK 0x3 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 =
150/(2*3) = 25.0 MHz
#define ADC_CKPS 0x0 // ADC module clock = HSPCLK/1 = 25.5MHz/(1)
= 25.0 MHz
#define ADC_MODO 0x0 // 1 es simultáneo 0 es secuencial
#define ADC_SHCLK 0x1 // S/H ancho en periodos ADC = 2 ciclos ADC
longinti,k;
unsignedintResultadoADC[16];
voidmain(void)
{
DINT; //deshabilita interrupciones
DRTM; //deshabilita interrupciones real time mode
InitSysCtrl(); //inicializa el sistema como PLL,clocks,watcgdog
EALLOW;
SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK =
SYSCLKOUT/ADC_MODCLK = 25MHz
EDIS;
InitSciaGpio(); // inicializa los pines scia para ser usados con su función sci
InitPieCtrl(); //inicializa el apoyo de interrupción de periféricos
IER = 0x0000; //limpia máscara de interrupciones
IFR = 0x0000; //limpia bandera de interrupciones
InitPieVectTable(); //inicializa tabla de interrupciones por defecto
InitAdc(); // inicializa ADC
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS; // ADC module clock =
25MHz
AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; // Modo Secuencial:
Ancho del S/H = (2+ACQ_PS)*ADC clock en ns
// En modo simultáneo sería: = (3+ACQ_PS)*ADC clock en ns
AdcRegs.ADCTRL3.bit.SMODE_SEL = ADC_MODO; // Secuencial
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // 1 Cascaded mode
AdcRegs.ADCTRL1.bit.CONT_RUN = 0; // Modocontínuo
AdcRegs.ADCTRL1.bit.SEQ_OVRD = 0; // Deshabilitar Override, sin
wrap around ADCRESULT
AdcRegs.ADCCHSELSEQ1.all = 0x3210; // Selecionarcanales 0-1-2-3
AdcRegs.ADCCHSELSEQ2.all = 0x7654;
AdcRegs.ADCCHSELSEQ3.all = 0xBA98;
AdcRegs.ADCCHSELSEQ4.all = 0xFEDC;
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0xF; // Convertir y guardar 16
canales
AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1; // Arranque inicial del ADC
EINT; //habilita interrupciones
ERTM;
IniciarSerial(); //Inicialización de los parámetros del puerto serial A
do{ //hacer loop por lo menos una vez
IteraSerial();
AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1; //Arranque de conversión SOC por
SW
while(AdcRegs.ADCST.bit.SEQ1_BSY ==1) {}; //Esperar a que termine
ResultadoADC[0]= AdcRegs.ADCRESULT0>>4; //Leer resultados
ResultadoADC[1]= AdcRegs.ADCRESULT2>>4;
}while(1); //Itera infinitamente
}
LABORATORIO 5
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
#include "lab5.h"
#include "monitorF28335.h"
#define ADC_MODCLK 0x3 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 =
150/(2*3) = 25.0 MHz
#define ADC_CKPS 0x0 // ADC module clock = HSPCLK/1 = 25.5MHz/(1)
= 25.0 MHz
#define ADC_MODO 0x0 // 1 es simultáneo 0 es secuencial
#define ADC_SHCLK 0x1 // S/H ancho en periodos ADC = 2 ciclos ADC
longinti,k;
// int max1; max2; max3;
unsignedintResultadoADC[4];
void main(void)
{
DINT; //deshabilita interrupciones
DRTM; //deshabilita interrupciones real time mode
InitSysCtrl(); //inicializa el sistema como PLL,clocks,watcgdog
![Page 7: Dsp](https://reader031.vdocuments.us/reader031/viewer/2022020417/55cf94b9550346f57ba3ff46/html5/thumbnails/7.jpg)
EALLOW;
SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK =
SYSCLKOUT/ADC_MODCLK = 25MHz
EDIS;
InitSciaGpio(); // inicializa los pines scia para ser usados con su función sci
InitPieCtrl(); //inicializa el apoyo de interrupción de periféricos
IER = 0x0000; //limpia máscara de interrupciones
IFR = 0x0000; //limpia bandera de interrupciones
InitPieVectTable(); //inicializa tabla de interrupciones por defecto
// ISR functions found within this file.
EALLOW; // This is needed to write to EALLOW protected register
GpioCtrlRegs.GPAPUD.bit.GPIO15 = 0;
GpioCtrlRegs.GPAPUD.bit.GPIO16 = 0;
GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO15 = 0;
GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 0;
GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO15 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO16 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO17 = 1;
PieVectTable.ADCINT = &adc_isr;
EDIS; // This is needed to disable write to EALLOW protected registers
InitAdc(); // inicializa ADC
// Enable ADCINT in PIE
PieCtrlRegs.PIEIER1.bit.INTx6 = 1;
IER |= M_INT1; // Enable CPU Interrupt 1
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS; // ADC module clock =
25MHz
AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; // ModoSecuencial: Ancho
del S/H = (2+ACQ_PS)*ADC clock en ns
// En modo simultáneo sería: = (3+ACQ_PS)*ADC clock en ns
AdcRegs.ADCTRL3.bit.SMODE_SEL = ADC_MODO; // Secuencial
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // 1 Cascaded mode
AdcRegs.ADCTRL1.bit.CONT_RUN = 1; // Modocontínuo
AdcRegs.ADCTRL1.bit.SEQ_OVRD = 0; // Deshabilitar Override, sin
wrap around ADCRESULT
AdcRegs.ADCCHSELSEQ1.bit.CONV00=1110; //0x3210; // Selecionar
canales 0-1-2-3
AdcRegs.ADCCHSELSEQ1.bit.CONV01=0011;
AdcRegs.ADCCHSELSEQ1.bit.CONV02=1111;
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x2; // Convertir y guardar 3
canales
AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1; // Arranque inicial del ADC
EINT; //habilita interrupciones
ERTM;
IniciarSerial(); //Inicialización de los parámetros del puerto serial A
do{ //hacer loop por lo menos una vez
IteraSerial();
AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;
ResultadoADC[0]=AdcRegs.ADCRESULT14>>4;//A
ResultadoADC[1]=AdcRegs.ADCRESULT3>>4;//B
ResultadoADC[2]=AdcRegs.ADCRESULT15>>4;//C
if(ResultadoADC[0]>ResultadoADC[1]&&ResultadoADC[0]>ResultadoADC[2])
{
GpioDataRegs.GPADAT.bit.GPIO15=1;
}else{
if(ResultadoADC[1]>ResultadoADC[0]&&ResultadoADC[1]>ResultadoADC[2]){
GpioDataRegs.GPADAT.bit.GPIO16=1;
}else{
GpioDataRegs.GPADAT.bit.GPIO17=1;
}
}
}while(1); //Itera infinitamente
}
LABORATORIO 6
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
#include "lab6.h"
#include "monitorF28335.h"
#define ADC_MODCLK 0x3 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 =
150/(2*3) = 25.0 MHz
#define ADC_CKPS 0x0 // ADC module clock = HSPCLK/1 = 25.5MHz/(1)
= 25.0 MHz
#define ADC_MODO 0x0 // 1 es simultáneo 0 es secuencial
#define ADC_SHCLK 0x1 // S/H ancho en periodos ADC = 2 ciclos ADC
longinti,k;
unsignedint t1,t2,t0;
![Page 8: Dsp](https://reader031.vdocuments.us/reader031/viewer/2022020417/55cf94b9550346f57ba3ff46/html5/thumbnails/8.jpg)
unsignedintResultadoADC[16];
void main(void)
{
DINT; //deshabilita interrupciones
DRTM; //deshabilita interrupciones real time mode
InitSysCtrl(); //inicializa el sistema como PLL,clocks,watcgdog
EALLOW;
SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK =
SYSCLKOUT/ADC_MODCLK = 25MHz
EDIS;
InitSciaGpio(); // inicializa los pines scia para ser usados con su función sci
InitPieCtrl(); //inicializa el apoyo de interrupción de periféricos
IER = 0x0000; //limpia máscara de interrupciones
IFR = 0x0000; //limpia bandera de interrupciones
InitPieVectTable(); //inicializa tabla de interrupciones por defecto
// ISR para los timers de CPU
EALLOW; // Habilita cambio de registros
PieVectTable.TINT0 = &cpu_timer0_isr; //apuntar a subrutina interrupt de
timer0
PieVectTable.XINT13 = &cpu_timer1_isr;//apuntar a subrutina interrupt de
timer1
PieVectTable.TINT2 = &cpu_timer2_isr;//apuntar a subrutina interrupt de
timer2
EDIS; // Deshabilita cambio de registros
InitAdc(); // inicializa ADC
iniciarRegADC(); // iniciar parámetros propios para el ADC
preparaLuces(); // prepara GPIO para luces alternas
InitCpuTimers(); // inicializa los CpuTimers
ConfigCpuTimer(&CpuTimer0, 150, 1000000); // a 150MHz 1000000uSeg =
1segundo
ConfigCpuTimer(&CpuTimer1, 150, 4500000); // a 150MHz 4500000uSeg =
4.5segundos
ConfigCpuTimer(&CpuTimer2, 150, 100000); // a 150MHz 100000uSeg =
0.1segundos
CpuTimer0Regs.TCR.all = 0x4001; // Arrancar timer T0 TSS bit = 0
CpuTimer1Regs.TCR.all = 0x4001; // Arrancar timer T0 TSS bit = 0
CpuTimer2Regs.TCR.all = 0x4001; // Arrancar timer T0 TSS bit = 0
// Notar que cuando se usa .all es una instrucción directa de escritura
// con .bit para no modificar los otros bits se lee primero y luego se escribe
IER = M_INT1| M_INT13; // Interrupciones 1 y 13
IER |= M_INT14; // Aumentar interrupción 14
PieCtrlRegs.PIEIER1.bit.INTx7 = 1; // la interrupción TINT0 pasa por el PIE
XIntruptRegs.XNMICR.bit.SELECT= 0; // asegura que TINT1 está conectado a
INT13 y no XNMI
EINT; //habilita interrupciones
ERTM;
IniciarSerial(); //Inicialización de los parámetros del puerto serial A
do{ //hacer loop por lo menos una vez
IteraSerial();
}while(1); //Itera infinitamente
}
interruptvoid cpu_timer0_isr(void)
{
t0++;
CpuTimer0.InterruptCount++;
GpioDataRegs.GPATOGGLE.bit.GPIO31 = 1; //alterna estado del led
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; //Reconocer interrupt grupo1
}
interrupt void cpu_timer1_isr(void)
{
t1++;
CpuTimer1.InterruptCount++;
GpioDataRegs.GPBTOGGLE.bit.GPIO34 = 1; //alterna estado del led
// El Cpu reconoce solo la interrupción
EDIS;
}
interrupt void cpu_timer2_isr(void)
{ t2++;
EALLOW;
CpuTimer2.InterruptCount++;
ResultadoADC[0]= AdcRegs.ADCRESULT0 >>4;
ResultadoADC[1]= AdcRegs.ADCRESULT1 >>4;
AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1; // Arranque de conversión del ADC
// El Cpu reconoce solo la interrupción
EDIS;
}
voidiniciarRegADC(void)
![Page 9: Dsp](https://reader031.vdocuments.us/reader031/viewer/2022020417/55cf94b9550346f57ba3ff46/html5/thumbnails/9.jpg)
{
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS; // ADC module clock =
25MHz
AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; // Modo Secuencial:
Ancho del S/H = (2+ACQ_PS)*ADC clock en ns
// En modo simultáneo sería: = (3+ACQ_PS)*ADC clock en ns
AdcRegs.ADCTRL3.bit.SMODE_SEL = ADC_MODO; // Secuencial
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // 1 Cascaded mode
AdcRegs.ADCTRL1.bit.CONT_RUN = 0; // No al modo contínuo
AdcRegs.ADCTRL1.bit.SEQ_OVRD = 0; // Deshabilitar Override, sin wrap
around ADCRESULT
AdcRegs.ADCCHSELSEQ1.all = 0x3210; // Selecionarcanales 0-1-2-3
AdcRegs.ADCCHSELSEQ2.all = 0x7654;
AdcRegs.ADCCHSELSEQ3.all = 0xBA98;
AdcRegs.ADCCHSELSEQ4.all = 0xFEDC;
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0xF; // Convertir y guardar 16
canales
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 0; // No habilitar interrupción
SEQ1
AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1; // Arranque inicial del ADC
}
voidpreparaLuces(void)
{
// Luces en el control Card
EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO31 = 0; // Habilitar pullup en GPIO31
GpioDataRegs.GPADAT.bit.GPIO31 = 1; // Latch a 1
GpioCtrlRegs.GPAMUX2.bit.GPIO31 = 0; // GPIO31 = GPIO31
GpioCtrlRegs.GPADIR.bit.GPIO31 = 1; // GPIO31 = es salida
GpioCtrlRegs.GPBPUD.bit.GPIO34 = 0; // Habilitar pullup en GPIO34
GpioDataRegs.GPBDAT.bit.GPIO34 = 0; // Latch a 0
GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0; // GPIO34 = GPIO34
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1; // GPIO34 = es salida
EDIS;
}
LABORATORIO 7
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
#include "lab7.h"
#include "monitorF28335.h"
#define EPWM1_TIMER_TBPRD 2000 // Period register
#define EPWM1_MAX_CMPA 1950
#define EPWM1_MIN_CMPA 50
#define EPWM1_MAX_CMPB 1950
#define EPWM1_MIN_CMPB 50
#define EPWM_CMP_UP 1
#define EPWM_CMP_DOWN 0
void main(void)
{
DINT; //deshabilita interrupciones
DRTM; //deshabilita interrupciones real time mode
InitSysCtrl(); //inicializa el sistema como PLL,clocks,watcgdog
InitEPwm1Gpio();
InitSciaGpio(); // inicializa los pines scia para ser usados con su función sci
InitPieCtrl(); //inicializa el apoyo de interrupción de periféricos
IER = 0x0000; //limpia máscara de interrupciones
IFR = 0x0000; //limpia bandera de interrupciones
InitPieVectTable(); //inicializa tabla de interrupciones por defecto
// ISR para los timers de CPU
EALLOW; // Habilita cambio de registros
PieVectTable.EPWM1_INT = &epwm1_isr;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
EDIS;// Deshabilita cambio de registros
IniciaEPwm1();
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
EDIS;
IER |= M_INT3; // Interrupción 3
PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
EINT; //habilita interrupciones
ERTM;
IniciarSerial(); //Inicialización de los parámetros del puerto serial A
do{ //hacer loop por lo menos una vez
IteraSerial();
}while(1); //Itera infinitamente
![Page 10: Dsp](https://reader031.vdocuments.us/reader031/viewer/2022020417/55cf94b9550346f57ba3ff46/html5/thumbnails/10.jpg)
}
interruptvoid epwm1_isr(void)
{
// Limpiar bandera de interrupción del Timer
EPwm1Regs.ETCLR.bit.INT = 1;
// Reconocer la interrupción del grupo 3 para que pueda haber más
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
}
void IniciaEPwm1()
{
// Configurar TBCLK
EPwm1Regs.TBPRD = EPWM1_TIMER_TBPRD; // Determina el
periodo 801 TBCLKs
EPwm1Regs.TBPHS.half.TBPHS = 0x0000; // La fase es 0
EPwm1Regs.TBCTR = 0x0000; // Contador a cero
// Configurar valores de los Comparadores
EPwm1Regs.CMPA.half.CMPA = EPWM1_MIN_CMPA; // Dar valor al
comparador A
EPwm1Regs.CMPB = EPWM1_MAX_CMPB; // Dar valor al
comparador B
// Configurar modo de conteo
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Contar hacia
arriba y al llegar al periodo igual a cero
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Deshabilitar carga de
fase
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Tasa del prescalador
del SYSCLKOUT
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
// Configurar shadowing modo de sombra
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // cargar en
cero
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
// Configurar acciones
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM1A en evento
A, contar arriba
EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR; // Clear PWM1A en
evento A, contar abajo
EPwm1Regs.AQCTLB.bit.CBU = AQ_SET; // Set PWM1B en evento
B, contar arriba
EPwm1Regs.AQCTLB.bit.CBD = AQ_CLEAR; // Clear PWM1B en
evento B, contar abajo
// Interrupción cuando se cambiaran los valores de comparación
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Seleccionar INT en
evento Zero
EPwm1Regs.ETSEL.bit.INTEN = 1; // Habilitar INT
EPwm1Regs.ETPS.bit.INTPRD = ET_3RD; // Generar INT en el 3er
evento
}
LABORATORIO 8
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
#include "lab8.h"
#include "monitorF28335.h"
#define ADC_MODCLK 0x3 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 =
150/(2*3) = 25.0 MHz
#define ADC_CKPS 0x0 // ADC module clock = HSPCLK/1 = 25.5MHz/(1)
= 25.0 MHz
#define ADC_MODO 0x0 // 1 es simultáneo 0 es secuencial
#define ADC_SHCLK 0x1 // S/H ancho en periodos ADC = 2 ciclos ADC
longinti,k;
unsignedintResultadoADC[16];
EPWM_INFO epwm1_info;
EPWM_INFO epwm2_info;
EPWM_INFO epwm3_info;
#define EPWM1_TIMER_TBPRD 2000 // Period register
#define EPWM1_MAX_CMPA 1950
#define EPWM1_MIN_CMPA 50
#define EPWM1_MAX_CMPB 1950
#define EPWM1_MIN_CMPB 50
#define EPWM2_TIMER_TBPRD 2000 // Period register
#define EPWM2_MAX_CMPA 1950
#define EPWM2_MIN_CMPA 50
#define EPWM2_MAX_CMPB 1950
#define EPWM2_MIN_CMPB 50
#define EPWM3_TIMER_TBPRD 2000 // Period register
#define EPWM3_MAX_CMPA 950
#define EPWM3_MIN_CMPA 50
#define EPWM3_MAX_CMPB 1950
![Page 11: Dsp](https://reader031.vdocuments.us/reader031/viewer/2022020417/55cf94b9550346f57ba3ff46/html5/thumbnails/11.jpg)
#define EPWM3_MIN_CMPB 1050
#define EPWM_CMP_UP 1
#define EPWM_CMP_DOWN 0
void main(void)
{
DINT; //deshabilita interrupciones
DRTM; //deshabilita interrupciones real time mode
InitSysCtrl(); //inicializa el sistema como PLL,clocks,watcgdog
InitEPwm1Gpio();
InitEPwm2Gpio();
InitEPwm3Gpio();
EALLOW;
SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK =
SYSCLKOUT/ADC_MODCLK = 25MHz
EDIS;
InitSciaGpio(); // inicializa los pines scia para ser usados con su función sci
InitPieCtrl(); //inicializa el apoyo de interrupción de periféricos
IER = 0x0000; //limpia máscara de interrupciones
IFR = 0x0000; //limpia bandera de interrupciones
InitPieVectTable(); //inicializa tabla de interrupciones por defecto
// ISR para los timers de CPU
EALLOW; // Habilita cambio de registros
PieVectTable.EPWM1_INT = &epwm1_isr;
PieVectTable.EPWM2_INT = &epwm2_isr;
PieVectTable.EPWM3_INT = &epwm3_isr;
EDIS; // Deshabilita cambio de registros
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
EDIS;
InitEPwm1Example();
InitEPwm2Example();
InitEPwm3Example();
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
EDIS;
InitAdc(); // inicializa ADC
iniciarRegADC(); // iniciar parámetros propios para el ADC
preparaLuces(); // prepara GPIO para luces alternas
IER |= M_INT3; // Interrupción 3
PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
PieCtrlRegs.PIEIER3.bit.INTx2 = 1;
PieCtrlRegs.PIEIER3.bit.INTx3 = 1;
EINT; //habilita interrupciones
ERTM;
IniciarSerial(); //Inicialización de los parámetros del puerto serial A
do{ //hacer loop por lo menos una vez
IteraSerial();
}while(1); //Itera infinitamente
}
voidiniciarRegADC(void)
{
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS; // ADC module clock =
25MHz
AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; // Modo Secuencial:
Ancho del S/H = (2+ACQ_PS)*ADC clock en ns
// En modo simultáneo sería: = (3+ACQ_PS)*ADC clock en ns
AdcRegs.ADCTRL3.bit.SMODE_SEL = ADC_MODO; // Secuencial
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // 1 Cascaded mode
AdcRegs.ADCTRL1.bit.CONT_RUN = 0; // No al modo contínuo
AdcRegs.ADCTRL1.bit.SEQ_OVRD = 0; // Deshabilitar Override, sin wrap
around ADCRESULT
AdcRegs.ADCCHSELSEQ1.all = 0x3210; // Selecionarcanales 0-1-2-3
AdcRegs.ADCCHSELSEQ2.all = 0x7654;
AdcRegs.ADCCHSELSEQ3.all = 0xBA98;
AdcRegs.ADCCHSELSEQ4.all = 0xFEDC;
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0xF; // Convertir y guardar 16
canales
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 0; // No habilitar interrupción
SEQ1
AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1; // Arranque inicial del ADC
}
voidpreparaLuces(void)
{
// Luces en el control Card
EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO31 = 0; // Habilitar pullup en GPIO31
![Page 12: Dsp](https://reader031.vdocuments.us/reader031/viewer/2022020417/55cf94b9550346f57ba3ff46/html5/thumbnails/12.jpg)
GpioDataRegs.GPADAT.bit.GPIO31 = 1; // Latch a 1
GpioCtrlRegs.GPAMUX2.bit.GPIO31 = 0; // GPIO31 = GPIO31
GpioCtrlRegs.GPADIR.bit.GPIO31 = 1; // GPIO31 = es salida
GpioCtrlRegs.GPBPUD.bit.GPIO34 = 0; // Habilitar pullup en GPIO34
GpioDataRegs.GPBDAT.bit.GPIO34 = 0; // Latch a 0
GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0; // GPIO34 = GPIO34
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1; // GPIO34 = es salida
EDIS;
}
interrupt void epwm1_isr(void)
{
// Update the CMPA and CMPB values
update_compare(&epwm1_info);
// Clear INT flag for this timer
EPwm1Regs.ETCLR.bit.INT = 1;
// Acknowledge this interrupt to receive more interrupts from group 3
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
}
interrupt void epwm2_isr(void)
{
// Update the CMPA and CMPB values
update_compare(&epwm2_info);
// Clear INT flag for this timer
EPwm2Regs.ETCLR.bit.INT = 1;
// Acknowledge this interrupt to receive more interrupts from group 3
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
}
interrupt void epwm3_isr(void)
{
// Update the CMPA and CMPB values
update_compare(&epwm3_info);
// Clear INT flag for this timer
EPwm3Regs.ETCLR.bit.INT = 1;
// Acknowledge this interrupt to receive more interrupts from group 3
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
}
void InitEPwm1Example()
{
// Setup TBCLK
EPwm1Regs.TBPRD = EPWM1_TIMER_TBPRD; // Set timer period
801 TBCLKs
EPwm1Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0
EPwm1Regs.TBCTR = 0x0000; // Clear counter
// Set Compare values
EPwm1Regs.CMPA.half.CMPA = EPWM1_MIN_CMPA; // Set compare A
value
EPwm1Regs.CMPB = EPWM1_MAX_CMPB; // Set Compare B
value
// Setup counter mode
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase
loading
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to
SYSCLKOUT
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
// Setup shadowing
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // Load on Zero
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
// Set actions
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM1A on event A,
up count
EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR; // Clear PWM1A on
event A, down count
EPwm1Regs.AQCTLB.bit.CBU = AQ_SET; // Set PWM1B on event B,
up count
EPwm1Regs.AQCTLB.bit.CBD = AQ_CLEAR; // Clear PWM1B on
event B, down count
// Interrupt where we will change the Compare Values
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero
event
EPwm1Regs.ETSEL.bit.INTEN = 1; // Enable INT
EPwm1Regs.ETPS.bit.INTPRD = ET_3RD; // Generate INT on 3rd
event
// Information this example uses to keep track
![Page 13: Dsp](https://reader031.vdocuments.us/reader031/viewer/2022020417/55cf94b9550346f57ba3ff46/html5/thumbnails/13.jpg)
// of the direction the CMPA/CMPB values are
// moving, the min and max allowed values and
// a pointer to the correct ePWM registers
epwm1_info.EPwm_CMPA_Direction = EPWM_CMP_UP; // Start by
increasing CMPA &
epwm1_info.EPwm_CMPB_Direction = EPWM_CMP_DOWN; // decreasing
CMPB
epwm1_info.EPwmTimerIntCount = 0; // Zero the interrupt counter
epwm1_info.EPwmRegHandle = &EPwm1Regs; // Set the pointer to the
ePWM module
epwm1_info.EPwmMaxCMPA = EPWM1_MAX_CMPA; // Setup min/max
CMPA/CMPB values
epwm1_info.EPwmMinCMPA = EPWM1_MIN_CMPA;
epwm1_info.EPwmMaxCMPB = EPWM1_MAX_CMPB;
epwm1_info.EPwmMinCMPB = EPWM1_MIN_CMPB;
}
void InitEPwm2Example()
{
// Setup TBCLK
EPwm2Regs.TBPRD = EPWM2_TIMER_TBPRD; // Set timer period
801 TBCLKs
EPwm2Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0
EPwm2Regs.TBCTR = 0x0000; // Clear counter
// Set Compare values
EPwm2Regs.CMPA.half.CMPA = EPWM2_MIN_CMPA; // Set compare A
value
EPwm2Regs.CMPB = EPWM2_MIN_CMPB; // Set Compare B value
// Setup counter mode
EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up
EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase
loading
EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to
SYSCLKOUT
EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1;
// Setup shadowing
EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // Load on Zero
EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
// Set actions
EPwm2Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM2A on event A,
up count
EPwm2Regs.AQCTLA.bit.CBD = AQ_CLEAR; // Clear PWM2A on event
B, down count
EPwm2Regs.AQCTLB.bit.ZRO = AQ_CLEAR; // Clear PWM2B on zero
EPwm2Regs.AQCTLB.bit.PRD = AQ_SET ; // Set PWM2B on period
// Interrupt where we will change the Compare Values
EPwm2Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero
event
EPwm2Regs.ETSEL.bit.INTEN = 1; // Enable INT
EPwm2Regs.ETPS.bit.INTPRD = ET_3RD; // Generate INT on 3rd
event
// Information this example uses to keep track
// of the direction the CMPA/CMPB values are
// moving, the min and max allowed values and
// a pointer to the correct ePWM registers
epwm2_info.EPwm_CMPA_Direction = EPWM_CMP_UP; // Start by
increasing CMPA &
epwm2_info.EPwm_CMPB_Direction = EPWM_CMP_UP; // increasing
CMPB
epwm2_info.EPwmTimerIntCount = 0; // Zero the interrupt counter
epwm2_info.EPwmRegHandle = &EPwm2Regs; // Set the pointer to the
ePWM module
epwm2_info.EPwmMaxCMPA = EPWM2_MAX_CMPA; // Setup min/max
CMPA/CMPB values
epwm2_info.EPwmMinCMPA = EPWM2_MIN_CMPA;
epwm2_info.EPwmMaxCMPB = EPWM2_MAX_CMPB;
epwm2_info.EPwmMinCMPB = EPWM2_MIN_CMPB;
}
void InitEPwm3Example(void)
{
// Setup TBCLK
EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;// Count
up/down
EPwm3Regs.TBPRD = EPWM3_TIMER_TBPRD; // Set timer period
EPwm3Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase loading
EPwm3Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0
EPwm3Regs.TBCTR = 0x0000; // Clear counter
EPwm3Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to
SYSCLKOUT
EPwm3Regs.TBCTL.bit.CLKDIV = TB_DIV1;
![Page 14: Dsp](https://reader031.vdocuments.us/reader031/viewer/2022020417/55cf94b9550346f57ba3ff46/html5/thumbnails/14.jpg)
// Setup shadow register load on ZERO
EPwm3Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm3Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm3Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm3Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
// Set Compare values
EPwm3Regs.CMPA.half.CMPA = EPWM3_MIN_CMPA; // Set compare A
value
EPwm3Regs.CMPB = EPWM3_MAX_CMPB; // Set Compare B value
// Set Actions
EPwm3Regs.AQCTLA.bit.PRD = AQ_SET; // Set PWM3A on period
EPwm3Regs.AQCTLA.bit.CBD = AQ_CLEAR; // Clear PWM3A on event
B, down count
EPwm3Regs.AQCTLB.bit.PRD = AQ_CLEAR; // Clear PWM3A on
period
EPwm3Regs.AQCTLB.bit.CAU = AQ_SET; // Set PWM3A on event A,
up count
// Interrupt where we will change the Compare Values
EPwm3Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero
event
EPwm3Regs.ETSEL.bit.INTEN = 1; // Enable INT
EPwm3Regs.ETPS.bit.INTPRD = ET_3RD; // Generate INT on 3rd
event
// Information this example uses to keep track
// of the direction the CMPA/CMPB values are
// moving, the min and max allowed values and
// a pointer to the correct ePWM registers
epwm3_info.EPwm_CMPA_Direction = EPWM_CMP_UP; // Start by
increasing CMPA &
epwm3_info.EPwm_CMPB_Direction = EPWM_CMP_DOWN; // decreasing
CMPB
epwm3_info.EPwmTimerIntCount = 0; // Zero the interrupt counter
epwm3_info.EPwmRegHandle = &EPwm3Regs; // Set the pointer to the
ePWM module
epwm3_info.EPwmMaxCMPA = EPWM3_MAX_CMPA; // Setup min/max
CMPA/CMPB values
epwm3_info.EPwmMinCMPA = EPWM3_MIN_CMPA;
epwm3_info.EPwmMaxCMPB = EPWM3_MAX_CMPB;
epwm3_info.EPwmMinCMPB = EPWM3_MIN_CMPB;
}
voidupdate_compare(EPWM_INFO *epwm_info)
{
// Every 10'th interrupt, change the CMPA/CMPB values
if(epwm_info->EPwmTimerIntCount == 10)
{
epwm_info->EPwmTimerIntCount = 0;
// If we were increasing CMPA, check to see if
// we reached the max value. If not, increase CMPA
// else, change directions and decrease CMPA
if(epwm_info->EPwm_CMPA_Direction == EPWM_CMP_UP)
{
if(epwm_info->EPwmRegHandle->CMPA.half.CMPA<epwm_info-
>EPwmMaxCMPA)
{
epwm_info->EPwmRegHandle->CMPA.half.CMPA++;
}
else
{
epwm_info->EPwm_CMPA_Direction = EPWM_CMP_DOWN;
epwm_info->EPwmRegHandle->CMPA.half.CMPA--;
}
}
// If we were decreasing CMPA, check to see if
// we reached the min value. If not, decrease CMPA
// else, change directions and increase CMPA
else
{
if(epwm_info->EPwmRegHandle->CMPA.half.CMPA == epwm_info-
>EPwmMinCMPA)
{
epwm_info->EPwm_CMPA_Direction = EPWM_CMP_UP;
epwm_info->EPwmRegHandle->CMPA.half.CMPA++;
}
else
{
epwm_info->EPwmRegHandle->CMPA.half.CMPA--;
}
}
![Page 15: Dsp](https://reader031.vdocuments.us/reader031/viewer/2022020417/55cf94b9550346f57ba3ff46/html5/thumbnails/15.jpg)
// If we were increasing CMPB, check to see if
// we reached the max value. If not, increase CMPB
// else, change directions and decrease CMPB
if(epwm_info->EPwm_CMPB_Direction == EPWM_CMP_UP)
{
if(epwm_info->EPwmRegHandle->CMPB <epwm_info->EPwmMaxCMPB)
{
epwm_info->EPwmRegHandle->CMPB++;
}
else
{
epwm_info->EPwm_CMPB_Direction = EPWM_CMP_DOWN;
epwm_info->EPwmRegHandle->CMPB--;
}
}
// If we were decreasing CMPB, check to see if
// we reached the min value. If not, decrease CMPB
// else, change directions and increase CMPB
else
{
if(epwm_info->EPwmRegHandle->CMPB == epwm_info->EPwmMinCMPB)
{
epwm_info->EPwm_CMPB_Direction = EPWM_CMP_UP;
epwm_info->EPwmRegHandle->CMPB++;
}
else
{
epwm_info->EPwmRegHandle->CMPB--;
}
}
}
else
{
epwm_info->EPwmTimerIntCount++;
}
return;
}
UNO DE LOS PRIMEROS LABOS
while(1){
for (i=0;i<60;i++){ //Los retardo son proporcionales a la velocidad de
la memoria
GpioDataRegs.GPBTOGGLE.bit.GPIO60 = 1; // Modificar
alternando estado de GPIO60
for (k=0;k<retardo;k++); // bloque de retardo
GpioDataRegs.GPBTOGGLE.bit.GPIO60 = 1; // Modificar
alternando estado de GPIO60
GpioDataRegs.GPBTOGGLE.bit.GPIO61 = 1; // Modificar
alternando estado de GPIO61
for (k=0;k<retardo;k++); // bloque de retardo
GpioDataRegs.GPBTOGGLE.bit.GPIO61 = 1; // Modificar
alternando estado de GPIO61
GpioDataRegs.GPBTOGGLE.bit.GPIO62 = 1; // Modificar
alternando estado de GPIO62
for (k=0;k<retardo;k++); // bloque de retardo
GpioDataRegs.GPBTOGGLE.bit.GPIO62 = 1; // Modificar
alternando estado de GPIO62
GpioDataRegs.GPBTOGGLE.bit.GPIO63 = 1; // Modificar
alternando estado de GPIO63
for (k=0;k<retardo;k++); // bloque de retardo
GpioDataRegs.GPBTOGGLE.bit.GPIO63 = 1; // Modificar
alternando estado de GPIO63
GpioDataRegs.GPCTOGGLE.bit.GPIO64 = 1; // Modificar
alternando estado de GPIO64
for (k=0;k<retardo;k++); // bloque de retardo
GpioDataRegs.GPCTOGGLE.bit.GPIO64 = 1; // Modificar
alternando estado de GPIO64
GpioDataRegs.GPCTOGGLE.bit.GPIO65 = 1; // Modificar
alternando estado de GPIO65
for (k=0;k<retardo;k++); // bloque de retardo
GpioDataRegs.GPCTOGGLE.bit.GPIO65 = 1; // Modificar
alternando estado de GPIO65
GpioDataRegs.GPCTOGGLE.bit.GPIO66 = 1; // Modificar
alternando estado de GPIO66
for (k=0;k<retardo;k++); // bloque de retardo
GpioDataRegs.GPCTOGGLE.bit.GPIO66 = 1; // Modificar
alternando estado de GPIO66
GpioDataRegs.GPCTOGGLE.bit.GPIO67 = 1; // Modificar
alternando estado de GPIO67
for (k=0;k<retardo;k++); // bloque de retardo
![Page 16: Dsp](https://reader031.vdocuments.us/reader031/viewer/2022020417/55cf94b9550346f57ba3ff46/html5/thumbnails/16.jpg)
GpioDataRegs.GPCTOGGLE.bit.GPIO67 = 1; // Modificar
alternando estado de GPIO60
GpioDataRegs.GPCTOGGLE.bit.GPIO66 = 1; // Modificar
alternando estado de GPIO61
for (k=0;k<retardo;k++); // bloque de retardo
GpioDataRegs.GPCTOGGLE.bit.GPIO66 = 1; // Modificar
alternando estado de GPIO61
GpioDataRegs.GPCTOGGLE.bit.GPIO65 = 1; // Modificar
alternando estado de GPIO62
for (k=0;k<retardo;k++); // bloque de retardo
GpioDataRegs.GPCTOGGLE.bit.GPIO65 = 1; // Modificar
alternando estado de GPIO62
GpioDataRegs.GPCTOGGLE.bit.GPIO64 = 1; // Modificar
alternando estado de GPIO63
for (k=0;k<retardo;k++); // bloque de retardo
GpioDataRegs.GPCTOGGLE.bit.GPIO64 = 1; // Modificar
alternando estado de GPIO63
GpioDataRegs.GPBTOGGLE.bit.GPIO63 = 1; // Modificar
alternando estado de GPIO64
for (k=0;k<retardo;k++); // bloque de retardo
GpioDataRegs.GPBTOGGLE.bit.GPIO63 = 1; // Modificar
alternando estado de GPIO64
GpioDataRegs.GPBTOGGLE.bit.GPIO62 = 1; // Modificar
alternando estado de GPIO65
for (k=0;k<retardo;k++); // bloque de retardo
GpioDataRegs.GPBTOGGLE.bit.GPIO62 = 1; // Modificar
alternando estado de GPIO65
GpioDataRegs.GPBTOGGLE.bit.GPIO61 = 1; // Modificar
alternando estado de GPIO66
for (k=0;k<retardo;k++); // bloque de retardo
GpioDataRegs.GPBTOGGLE.bit.GPIO60 = 1; // Modificar
alternando estado de GPIO66
}
}
}
CONFIGURAR
1) Abrir el codecomposer
2) Seleccionar el espacio de trabajo
3) Verificar que este abierto el programa (LAB1)
4) Compilar en Project->BuildAll
5) Verificar que no haya errores
6) Ir a View->Target Configurations
7) Aparece la ventana de configuración
8) Abrimos Projects->Lab1->XDS100
9) Click derecho en XDS100 y luego en LaunchSelectedConfiguration
10) Tenemos el entorno de prueba
11) Para conectar con la tarjeta Run->Connect Target
12) Para cargar el programa Run->Load->Load Program
13) Seleccionamos el programa que deseamos cargar
14) En nuestro caso C->DSP28335_2013>Lab1->Debug->lab01.out
15) Para correr el programa hacer click en la flecha verde (F8)
PRIMEROS LABOS
//Pull up y Multiplexor de los pines
GpioCtrlRegs.GPBPUD.bit.GPIO60 = 0; // Habilitar pullup en GPIO60
GpioCtrlRegs.GPBPUD.bit.GPIO61 = 0; // Habilitar pullup en GPIO61
GpioCtrlRegs.GPBPUD.bit.GPIO62 = 0; // Habilitar pullup en GPIO62
GpioCtrlRegs.GPBPUD.bit.GPIO63 = 0; // Habilitar pullup en GPIO63
GpioCtrlRegs.GPCPUD.bit.GPIO64 = 0; // Habilitar pullup en GPIO64
GpioCtrlRegs.GPCPUD.bit.GPIO65 = 0; // Habilitar pullup en GPIO65
GpioCtrlRegs.GPCPUD.bit.GPIO66 = 0; // Habilitar pullup en GPIO66
GpioCtrlRegs.GPCPUD.bit.GPIO67 = 0; // Habilitar pullup en GPIO67
//Es señal digital
GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 0; // GPIO60 = GPIO60
GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 0; // GPIO61 = GPIO61
GpioCtrlRegs.GPBMUX2.bit.GPIO62 = 0; // GPIO62 = GPIO62
GpioCtrlRegs.GPBMUX2.bit.GPIO63 = 0; // GPIO63 = GPIO63
GpioCtrlRegs.GPCMUX1.bit.GPIO64 = 0; // GPIO64 = GPIO64
GpioCtrlRegs.GPCMUX1.bit.GPIO65 = 0; // GPIO65 = GPIO65
GpioCtrlRegs.GPCMUX1.bit.GPIO66 = 0; // GPIO66 = GPIO66
GpioCtrlRegs.GPCMUX1.bit.GPIO67 = 0; // GPIO67 = GPIO67
//Es salida
GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1; // GPIO60 = es salida
GpioCtrlRegs.GPBDIR.bit.GPIO61 = 1; // GPIO61 = es salida
GpioCtrlRegs.GPBDIR.bit.GPIO62 = 1; // GPIO62 = es salida
GpioCtrlRegs.GPBDIR.bit.GPIO63 = 1; // GPIO63 = es salida
GpioCtrlRegs.GPCDIR.bit.GPIO64 = 1; // GPIO64 = es salida
GpioCtrlRegs.GPCDIR.bit.GPIO65 = 1; // GPIO64 = es salida
GpioCtrlRegs.GPCDIR.bit.GPIO66 = 1; // GPIO64 = es salida
![Page 17: Dsp](https://reader031.vdocuments.us/reader031/viewer/2022020417/55cf94b9550346f57ba3ff46/html5/thumbnails/17.jpg)
GpioCtrlRegs.GPCDIR.bit.GPIO67 = 1; // GPIO64 = es salida
EDIS;
GpioDataRegs.GPBDAT.bit.GPIO60 = 0; // GPIO60=0
GpioDataRegs.GPBDAT.bit.GPIO61 = 0; // GPIO61=0
GpioDataRegs.GPBDAT.bit.GPIO62 = 0; // GPIO62=0
GpioDataRegs.GPBDAT.bit.GPIO63 = 0; // GPIO63=0
GpioDataRegs.GPCDAT.bit.GPIO64 = 0; // GPIO64=0
GpioDataRegs.GPCDAT.bit.GPIO65 = 0; // GPIO65=0
GpioDataRegs.GPCDAT.bit.GPIO66 = 0; // GPIO66=0
GpioDataRegs.GPCDAT.bit.GPIO67 = 0; // GPIO67=0
EINT;
ERTM;
while(1){
for (i=0;i<60;i++){ //Los retardo son proporcionale