Part Number: TMS320F28379D
Tool/software:
Hi,
I am using SCIa on core 1 and SCIc on core 2 of 28379D. This is a test. I am trying to read data sent out by scic on second core and put data on shared memory and read on cpu1. My problem is second core jumps to RX interrupt routine just once. Interrupt does not get cleared, and then RXFFST shows 10000! I really appreciate your comment on this. The code is:
//#############################################################################
// Included Files
#include "device.h"
#include "driverlib.h"
#include "inc/hw_ipc.h"
#pragma DATA_SECTION(rxData, ".myCharArraySection2_1")
char rxData[5];
volatile bool rxComplete = false;
__interrupt void scicRxFIFOISR(void)
{
int i;
// Assuming RX FIFO level is 4
int16_t fifoCount = HWREG(SCIC_BASE + SCI_FFRX_RXFFST_M);
for (i = 0; fifoCount && i < 5; i++)
{
rxData[i] = HWREG(SCIC_BASE + SCI_O_RXBUF); // Read each byte from FIFO
// Process each byte (e.g., store, echo, parse)
}
rxComplete = true;
if(!(HWREG(IPC_BASE + IPC_O_STS) & (1UL)))
{
//
HWREG(IPC_BASE + IPC_O_SET) = 1UL;
}
// Clear RX FIFO interrupt flag
//i=HWREG(SCIC_BASE + SCI_O_FFRX);
HWREG(SCIC_BASE + SCI_O_FFRX) |= SCI_FFRX_RXFFINTCLR;
// ScicRegs.SCIFFRX.bit.RXFFINTCLR = 1; //same as above
// Acknowledge PIE interrupt
HWREG(PIECTRL_BASE + PIE_O_ACK) = INTERRUPT_ACK_GROUP8;
}
//
void main(void)
{
uint32_t count;
uint16_t state;
uint16_t TXBSY;
//
Device_init();
Interrupt_initModule();
Interrupt_initVectorTable();
SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_SCIC);
SCI_setConfig(SCIC_BASE, 50000000, 115200, SCI_CONFIG_WLEN_8 | SCI_CONFIG_STOP_ONE | SCI_CONFIG_PAR_NONE);
SCI_enableModule(SCIC_BASE);
SCI_resetChannels(SCIC_BASE);
HWREG(SCIC_BASE + SCI_O_FFTX)|=0X4000;
HWREG(SCIC_BASE + SCI_O_FFTX)|=0X0040;
Interrupt_register(INT_SCIC_RX, &scicRxFIFOISR);
HWREG(SCIC_BASE + SCI_O_FFRX) = 0x6025;
Interrupt_enable(INT_SCIC_RX);
Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP8);
Interrupt_enable(INTERRUPT_CPU_INT8);
HWREG(PIECTRL_BASE + PIE_IER8_INTX5) = PIE_IER8_INTX5;
HWREG(SCIC_BASE + SCI_O_FFTX)|=0x0040;
IER |= INTERRUPT_CPU_INT8; // Enable CPU INT8
EINT;
ERTM;
HWREG(IPC_BASE + IPC_O_SET) = 1UL << ipcFlag17;
state = GPIO_readPin(11UL);
GPIO_togglePin(10UL);
while(1) {
if(count++ > 200000) {
count = 0;
// GPIO_togglePin(35U);
GPIO_writePin(52U, 1);
// GPIO_setPortPins(GPIO_PORT_B, 20U);
SCI_writeCharBlockingFIFO(SCIC_BASE, '1');
SCI_writeCharBlockingFIFO(SCIC_BASE, '2');
SCI_writeCharBlockingFIFO(SCIC_BASE, '3');
SCI_writeCharBlockingFIFO(SCIC_BASE, '4');
SCI_writeCharBlockingFIFO(SCIC_BASE, '5');
// GPIO_clearPortPins(GPIO_PORT_B, 20U);
// GpioDataRegs.GPBSET.bit.GPIO51=0;
// Toggle GPIO10
GPIO_togglePin(10UL);
}
TXBSY= (HWREGH(SCIC_BASE + SCI_O_CTL2) & SCI_CTL2_TXEMPTY);
TXBSY= !(((HWREGH(SCIC_BASE + SCI_O_CTL2) & SCI_CTL2_TXEMPTY) == SCI_CTL2_TXEMPTY) ? true : false);
GPIO_writePin(52U, TXBSY);
}
}
// End of file
Thank you