主题中讨论的其他器件:C2000WARE
工具/软件:Code Composer Studio
你好!!!
我们购买了以下开发板集:
1. HSEC180 controlCARD 基板集线站
www.ti.com/.../TMDSHSECDOCK
2.F28388D controlCARD 评估模块
www.ti.com/.../TMDSCNCD28388D
现在、我已经根据此控制器的 C2000Ware_3_02_00_00附带的示例创建了一个测试项目、在该项目中、我要执行以下操作: 通过 SPI 发送数据、发现正在触发中断且发送数据包的计数器正在增加、在引脚上站起来观察振荡器、并查看时钟和数据
void Test_Dev_Init (void){
//SPI_A
引脚= 18;// CLK
GPIO_setMasterCore (引脚、GPIO_CORE_CPU1);
GPIO_setPinConfig (GPIO_18_SPIA_CLK);
GPIO_setPadConfig (引脚、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (引脚、GPIO_QUAL_异 步);
引脚= 16;//SIMO
GPIO_setMasterCore (引脚、GPIO_CORE_CPU1);
GPIO_setPinConfig (GPIO_16_SPIA_SIMO);
GPIO_setPadConfig (引脚、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (引脚、GPIO_QUAL_异 步);
引脚= 17;//SOMI
GPIO_setMasterCore (引脚、GPIO_CORE_CPU1);
GPIO_setPinConfig (GPIO_17_SPIA_SOMI);
GPIO_setPadConfig (引脚、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (引脚、GPIO_QUAL_异 步);
引脚= 19;// STE
GPIO_setMasterCore (引脚、GPIO_CORE_CPU1);
GPIO_setPinConfig (GPIO_19_SPIA_STEN);
GPIO_setPadConfig (引脚、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (引脚、GPIO_QUAL_异 步);
//配置
SPI_disableModule (SPIA_BASE);
// SPI 配置。 使用500kHz SPICLK 和16位字大小。
SPI_setConfig (SPIA_BASE、DEVICE_LSPCLK_FREQ、SPI_PROT_POL0PHA0、SPI_MODE_MASTER、SPI_A_SPEED、 SPI_A_DATA_width);
SPI_disableLoopback (SPIA_BASE);
SPI_setEmulationMode (SPIA_BASE、SPI_emulation_free_run);
// FIFO 和中断配置
SPI_enableFIFO (SPIA_BASE);
SPI_resetTxFIFO (SPIA_BASE);
SPI_setFIFOInterruptLevel (SPIA_BASE、SPI_FIFO_TX8、SPI_FIFO_RX8);
SPI_clearInterruptStatus (SPIA_BASE、SPI_INT_TXFF);
SPI_enableInterrupt (SPIA_BASE、SPI_INT_TXFF);
SPI_enableModule (SPIA_BASE);
INTERRUPT_REGTER (INT_SPIA_TX、&SPI_A_FIFO_ISR);
INTERRUPT_ENABLE (INT_SPIA_TX);
}
//////////////////////////////// 测试 SPI /////////////////////////////////////////////////////
volatile uint16_t SPI_txMsgCount = 0;
__interrupt void SPI_A_FIFO_ISR (void){
uint32_t i、status;
状态= SPI_getInterruptStatus (SPIA_BASE);
I = SPI_getTxFIFOStatus (SPIA_BASE);
SCIprintf ("\r\nSPI_A_FIFO_ISR (int_STS = 0x%x、fifo_STS = 0x%x、)"、status、i);
SPI_txMsgCount++;
SPI_clearInterruptStatus (SPIA_BASE、SPI_INT_TXFF);
INTERRUPT_clearACKGROUP (INTERRUPT_ACK_group6);
状态= SPI_getInterruptStatus (SPIA_BASE);
I = SPI_getTxFIFOStatus (SPIA_BASE);
SCIprintf ("\r\nSPI_A_FIFO_ISR_After (int_STS = 0x%x、fifo_STS = 0x%x、)"、status、I);
}
void Test_Dev_SPI (void){
uint32_t i;
uint16_t SPI_DATA[2]={0、0};
SCIprintf ("\r\nTest_Dev_SPI Start");
while (SPI_txMsgCount < 10){
对于(i = 0;i < 2;i++){
SPI_writeDataNonBlocking (SPIA_BASE、SPI_DATA[i]<<(16 - SPI_A_DATA_width));
SPI_DATA[I]++;
}
}
SCIprintf ("\r\nTest_Dev_SPI end");
}
void main (void)
{//初始化器件时钟和外设
device_init();
//启动 CM 内核
#ifdef _flash
DEVICE_BOOTCM (BOOTMODE_BOOT_TO_FLASH_SECTOR0);
#else
DEVICE_BOOTCM (BOOTMODE_BOOT_TO_S0RAM);
#endif
//初始化 GPIO
DEVICE_initGPIO();
//禁用 CPU 中断
Dint;
//初始化中断控制器和矢量表。
interrupt_initModule();
interrupt_initVectorTable();
IER = 0x0000;
IFR = 0x0000;
//init 接口和外围设备
test_Dev_Init();
EINT;
ERTM;
SCIprintf ("\033C");
SCIprintf ("\r\n||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||) \n");
TEST_Dev_SPI();
}
现在我看到以下内容:通过 SPI、只要我启用中断、就会立即调用 SPI 中断、尽管数据不是通过 SPI 传输的、而传输标志不会被清除、从调试打印中可以看出:
SPI_A_FIFO_ISR (INT_STS = 0x8、FIFO_STS = 0x0、)
SPI_A_FIFO_ISR_After (INT_STS = 0x8、FIFO_STS = 0x0、)
SPI_A_FIFO_ISR (INT_STS = 0x8、FIFO_STS = 0x0、)
SPI_A_FIFO_ISR_After (INT_STS = 0x8、FIFO_STS = 0x0、)
SPI_A_FIFO_ISR (INT_STS = 0x8、FIFO_STS = 0x0、)
SPI_A_FIFO_ISR_After (INT_STS = 0x8、FIFO_STS = 0x0、)
SPI_A_FIFO_ISR (INT_STS = 0x8、FIFO_STS = 0x0、)
SPI_A_FIFO_ISR_After (INT_STS = 0x8、FIFO_STS = 0x0、)
SPI_A_FIFO_ISR (INT_STS = 0x8、FIFO_STS = 0x0、)
SPI_A_FIFO_ISR_After (INT_STS = 0x8、FIFO_STS = 0x0、)
SPI_A_FIFO_ISR (INT_STS = 0x8、FIFO_STS = 0x0、)
SPI_A_FIFO_ISR_After (INT_STS = 0x8、FIFO_STS = 0x0、)
SPI_A_FIFO_ISR (INT_STS = 0x8、FIFO_STS = 0x0、)
SPI_A_FIFO_ISR_After (INT_STS = 0x8、FIFO_STS = 0x0、)
SPI_A_FIFO_ISR (INT_STS = 0x8、FIFO_STS = 0x0
很可能问题是设置中断本身、但我根据示例查看了所有内容、我做的很好、示例本身的行为也一样
我让大家看看初始化、也许您会有一些想法、我已经查看了 TI 的一组示例、在 GitHub 上、我看不到以这种方式通过 SPI 处理中断的原因是什么
我还想提请您注意、该模块通过外部电源+ 5V、1.2A 供电、即电流应该足够