工具/软件:
您好、
我对 28379D 的 CORE 1 使用 SCIa、对 CORE 2 使用 SCIC。 这是一个测试。 我尝试在第二个内核上读取 SCIC 发送的数据、并将数据放在共享存储器上并在 CPU1 上读取。 我的问题是第二个内核跳转到 RX 中断例程只有一次。 中断未被清除、然后 RXFFST 显示为 10000! 非常感谢您对此的评论。 代码为:
//#############################################################################
// 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
谢谢你