Thread 中讨论的其他器件: EK-TM4C123GXL
大家好、
我刚刚开始使用微控制器。 我使用的是 TM4C123GH6PM。
到目前为止、我还没有使用 SSI 通信、所以我编写了所附的代码、控制器通过两个 SSI 端口向自己发送消息。
我现在只通过下载 OT 中断来简化程序。
当我运行这个代码时、接收端口调用 ISR 并保存发送的数据、而不是再被调用一次、但是不写入任何数据、并且不再调用 ISR。
我缺少什么吗?
#include
#include
#include "inc/hw_memmap.h"
#include "inc/hw_ints.h"
#include "driverlib/debug.h"
#include "driverlib/ssi.h"
#include "driverlib/syscReceive.h"
#include "driverlib/gpin_map.h"
#include "driverlib_pin_map.h"
;#include "uintsbacer_e0_ints_deft = void 值32_intrabr.h;#define i20_int_int_ints_decrate.h =#include "uint_int_int_int_int_ints_ints_decrect.h = void 0_
SSIIntClear (SSI2_base、SSI_RXTO);
SSIDataGetNonBlocking (SSI2_base、&dataReceived [message_Index++]);
}
int main (void)
{
volatile uint32_t cycle_Counter = 0;
//启用 SSI1外设:
SysCtlPeripheralEnable (SYSCTL_Periph_SSI1);
while (!SysCtlPeripheralReady (SYSCTL_Periph_SSI1))
{
}
//启用 SSI2外设:
SysCtlPeripheralEnable (SYSCTL_Periph_SSI2);
while (!SysCtlPeripheralReady (SYSCTL_Periph_SSI2))
{
}
//
//对于本示例,SSI0与 Porta[5:2]一起使用。 实际端口和
//使用的引脚可能与您的器件不同、请参阅的数据表
//更多信息。 GPIO 端口 A 需要启用、以便这些引脚可以
//使用。
//
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
//
//为 SSI 配置引脚
GPIOPinConfigure (GPIO_PD0_SSI1CLK);
GPIOPinConfigure (GPIO_PD1_SSI1FSS);
GPIOPinConfigure (GPIO_PD2_SSI1RX);
GPIOPinConfigure (GPIO_PD3_SSI1TX);
GPIOPinConfigure (GPIO_PB4_SSI2CLK);
GPIOPinConfigure (GPIO_PB5_SSI2FSS);
GPIOPinConfigure (GPIO_PB6_SSI2RX);
GPIOPinConfigure (GPIO_PB7_SSI2TX);
//
//配置 SSI 引脚的 GPIO 设置。
//查看每个引脚分配的函数。
//引脚分配如下:
// PB4 - SSI2CLK
// Pb5 - SSI2FSS
// Pb6 - SSI2RX
// Pb7 - SSI2TX
// PD0 - SSI1CLK
// PD1 - SSI1FSS
// PD2 - SSI1RX
// PD3 - SSI1TX
//
GPIOPinTypeSSI (GPIO_PORTB_BASE、GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 |
GPIO_PIN_7);
GPIOPinTypeSSI (GPIO_PORTD_base、GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 |
GPIO_PIN_3);
//配置两个 SSI、1个作为主机、2个作为从机
SSIConfigSetExpClk (SSI1_base、SysCtlClockGet ()、SSI_FRF_MOTO_MOTO_0、SSI_MODE_MASTER、50000、 8);
SSIConfigSetExpClk (SSI2_base、SysCtlClockGet ()、SSI_FRF_MOTO_MOTO_0、SSI_MODE_SLAVE、50000、 8);
//启用两个 SSI
SSIEnable (SSI1_base);
SSIEnable (SSI2_base);
//对于接收器端口,我们只允许超时中断,或完全/半满 FIFO 中断
SSIIntEnable (SSI2_base、SSI_RXTO);//
//IntEnable (INT_SSI1);
IntEnable (INT_SSI2);
IntMasterEnable();
//完成配置,现在主程序启动
while (1)
{
SSIDataPut (SSI1_base、++cycle_Counter);
SysCtlDelay (SysCtlClockGet ()/300);
}
返回0;
}