我正在尝试在主模式下配置 SS0、在从模式下配置 SS3。
然后 SSI3模块接收数据、如果数据与发送的数据相匹配、则绿色 LED 将亮起。
我在调试模式下运行代码、通过检查发现代码卡在一个循环中、等待 SSI3从机模块接收数据。
它有时会运行、但未接收到文本"Hey"、我正在接收垃圾值。
硬件连接:
SSI0时钟连接到 SSI3时钟
SSI0Fss 连接到 SSI3Fss
SSI0Tx 连接到 SSI3Rx
SSI0Rx 连接到 SSI3Tx
以下是供您参考的代码。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define PORTD_LOCK (*(无符号长整型*)(GPIO_PORTD_BASE|0x0520)
#define PORTD_CR (*(无符号长整型 *)(GPIO_PORTD_BASE|0x0524)
#define PORta_lock (*(unsigned long *)(GPIO_PORta_base|0x0520))
#define PORta_CR (*(unsigned long *)(GPIO_PORta_base|0x0524))
void SSI_init (void);
void gpioInit(void);
int main (空)
{ char * pcChars ="Hey";
char * rcvd;
uint32_t *c、*垃圾;
uint32_t、s;
int i;
int32_t i32Idx;
bool isEq=true;
C=t;
垃圾邮件(&S);
gpioInit();
//SSI0模块已配置为主机模式
//SSI3模块已配置为从机模式
SSI_init();
//
//发送一些数据。
//
i32Idx = 0;
while (pcChars[i32Idx])
{
SSIDataPut (SSI0_BASE、pcChars[i32Idx]);
SSIDataGet (SSI0_BASE、SAWRAID);
SSIDataPut (SSI3_base、0xFF);
SSIDataGet (SSI3_base、c);
Rcvd[i32Idx]=t;
i32Idx++;
}
for (i=0;<sizeof(pcChars);i++))
{
if (pcChars[i]!=rcvd [i])
{isEq=false;
}
}
if (isEq=true)
{
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_3、0x08);
}
返回0;
}
空 SSI_init (空)
{
//使用一个4MHz 晶振将器件配置为从 PLL 以80MHz 的频率运行
//作为输入。
//
SysCtlClockSet (SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHz | SYSCTL_OSC_MAIN);
//
//启用 SSI0外设
//
SysCtlPeripheralEnable (SYSCTL_Periph_SSI0);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
//
//等待 SSI0模块准备就绪。
//
while (!SysCtlPeripheralReady (SYSCTL_Periph_SSI0))
{
}
SSIDisable (SSI0_BASE);
//解锁端口后再用作 SSI
PORta_lock=0x4C4F434B;
PORTA_CR=0x3C;
//为 SSI 模块设置引脚复用
GPIOPinConfigure (GPIO_PA2_SSI0CLK);
GPIOPinConfigure (GPIO_PA3_SSI0FSS);
GPIOPinConfigure (GPIO_PA4_SSI0RX);
GPIOPinConfigure (GPIO_PA5_SSI0TX);
//setup 引脚类型
GPIOPinTypeSSI (GPIO_Porta_base、GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5);
//配置 SSI0。
SSIClockSourceSet (SSI0_BASE、SSI_CLOCK_SYSTEM);
SSIConfigSetExpClk (SSI0_BASE、SysCtlClockGet ()、SSI_FRF_MOTO_MOTO_0、SSI_MODE_MASTER、3300000、8);
//
//启用 SSI 模块。
//
SSIEnable (SSI0_BASE);
//
//启用 SSI3外设
//
SysCtlPeripheralEnable (SYSCTL_Periph_SSI3);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
//
//等待 SSI 模块准备就绪。
//
while (!SysCtlPeripheralReady (SYSCTL_Periph_SSI3))
{
}
//
//配置 SSI。
//
SSIDisable (SSI3_base);
//解锁端口后再用作 SSI
PORTD_LOCK = 0x4C4F434B;
PORTD_CR=0x0F;
//为 SSI 模块设置引脚复用
GPIOPinConfigure (GPIO_PD0_SSI3CLK);
GPIOPinConfigure (GPIO_PD1_SSI3FSS);
GPIOPinConfigure (GPIO_PD2_SSI3RX);
GPIOPinConfigure (GPIO_PD3_SSI3TX);
//setup 引脚类型
GPIOPinTypeSSI (GPIO_PORTD_base、GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
//配置 SSI3从设备
SSIClockSourceSet (SSI3_base、SSI_CLOCK_SYSTEM);
SSIConfigSetExpClk (SSI3_base、SysCtlClockGet ()、SSI_FRF_MOTO_MOTO_0、SSI_MODE_SLAVE、3300000、8);
//
//启用 SSI 模块。
//
SSIEnable (SSI3_base);
}
void gpioInit()
{
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOF))
{
}
GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_3);
}