I am currently making a project using CCS 5.5 and DSP Bios 5.42 with the hardwae being the DSP 28335. The project is up and running and everything is working utilizing PRD functions to control the timing of my functions.
I now need to add a HWI into the code to receive SCI communication. I have tried setting up the PIE in the tcf file to call my HWI function however, even though data is coming into and out of the SCI the interrupt function is never called. I have even tried to set up a ISR outside of the bios to call the functions and it is never called using the PIE Vector table. Can you provide any insight as to why the functions would never be called or provide a detailed example of HWI's in DSP BIOS.
my first attempt was the set up the PIE 9.1 and 9.2 interrupts in the tcf file pointing to _myHWI (my hwi function) as well as including the the main loop clearing the IFR and IER and enabling the interupt via:
PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block
PieCtrlRegs.PIEIER9.bit.INTx1=1; // PIE Group 9, int1
PieCtrlRegs.PIEIER9.bit.INTx2=1; // PIE Group 9, INT2
as well as setting the mask to "all"
the code still runs and functions normally but the function mHWI() is never called.
with this failing i attempted to bypass the tcf files and just set up a ISR using the PIE vector without using the bios tcf functionality similar to what is done in the none bios examples and what the SPRAAX9 document says is possible.
this is a copy of all relevant code i have used to do this:
interrupt void myHWI(void);
void main()
{
InitSciaGpio(); //sets up GPIO pins to be used for SCI control
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.SCIRXINTA = &myHWI;
PieVectTable.SCITXINTA = &myHWI;
EDIS; // This is needed to disable write to EALLOW protected registers
scia_fifo_init(); // inits the FIFO of the SCI registers
PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block
PieCtrlRegs.PIEIER9.bit.INTx1=1; // PIE Group 9, int1
PieCtrlRegs.PIEIER9.bit.INTx2=1; // PIE Group 9, INT2
IER = 0x100; // Enable CPU INT
EINT;
return;
}
interrupt void myHWI(void){
HWI_count++;
return;
}
I believe this is the proper way to set up this PIE interrupt but again the function is never run even though the code builds and runs fine with all other functions running exactly as before. The only thing i know if missing is clearing the flag for the PIE after the interrupt is triggered but the functions never gets run for this to make a difference. Any insight on this issue and how to get the PIE working would be greatly appreciated.