主题中讨论的其他器件:CC1352R、
您好!
我尝试在 MSP430FR5994 (主器件)和 CC1352R (从器件)之间设置 SPI 通信。 我正在尝试复制 CC1352R 的 TI Resource Explorer/TI 驱动程序中给出的 SPI 示例。 CC1352R 主从示例在两个 CC1352R 板上对我有效。 现在、我想用 MSP430FR5994主器件替换 CC1352R 主器件。 我想我有一些配置问题、我怀疑 halHwi1Params.arg = 3。 我的应用在 SPI_TRANSFRA传输 进行过程中卡住。
编译器版本- 16.9.11.LTS
TI-RTOS 版本- 2.20.0.06
XDCTools 版本- 3.32.0.06_CORE
我的配置-
var halHwi0Params = new halHwi.Params (); halHwi0Params.arg = 0; halHwi0Params.instance.name ="halHwi0"; halHwi0Params.priority = 1; Program.global.halHwi0 = halHwi.create (48、 "&UARTEUSCI_hwiIntFxn"、halHwi0Params); var halHwi1Params = new halHwi.Params (); halHwi1Params.instance.name ="halHwi1"; halHwi1Params.arg = 3; halHwi1Params.priority = 3; Program.global.halHwi1 = 24、halHwi1 = halHwiCreate "&MSP_EXP430FR5994_isrDMA"、halHwi1Params); var halHwi2Params = new halHwi.Params (); halHwi2Params.arg = 4; halHwi2Params.priority = 5; Program.globalHwi2 = halHwi.create (32、"&Intwi_Hwi_GPIO" halHwi2Params);
在 msp430fr5994.c 中、MSP_EXP430FR5994_isrDMA 看起来是这样的
/* ================================================ DMA ================================================ // /* === MSP_EXP430FR5994_isrDMA === *这是一个应用程序定义的 DMA ISR。 此 ISR 必须映射并调用 *相应的 Driver_event (handle) API 以指示完成的 DMA 传输。 */ void MSP_EXP430FR5994_isrDMA (UARg arg) { /*调用 SPI DMA 函数、传递用于 WiFi 的 SPI 句柄*/ SPI_serviceISR ((SPI_Handle)&(SPI_CONFIG[0])); }
我的 SPI 主任务如下所示:
void MasterspiFxn (UArg0、UArgarg1){
uint32_t 一;
布尔 转让;
字符 uartStr[10];
/*配置 SPI 主从就绪 GPIO 引脚*/
GPIO_setConfig (CONFIG_SPI_MASTER_READY、GPIO_CFG_OUTPUT | GPIO_CFG_OUT_LOW);
GPIO_setConfig (CONFIG_SPI_SLAVE_READY、GPIO_CFG_INPUT);
/*设置主器件就绪引脚*/
GPIO_WRITE (CONFIG_SPI_MASTER_READY、1);
UART_WRITE (UART、"CONFIG_SPI_MASTER_READY\n"、sizeof ("CONFIG_SPI_MASTER_READY\n");
/*等待从设备准备就绪*/
while (GPIO_Read (CONFIG_SPI_SLAVE_READY)= 0){}
UART_WRITE (UART、"握手完成! \n"sizeof ("握手完成! \n");
//握手完成;现在在 CONFIG_SPI_SLAVE_READY 上配置中断*/
GPIO_setConfig (CONFIG_SPI_SLAVE_READY、GPIO_CFG_IN_pu | GPIO_CFG_IN_INT_INT_FALLING);
GPIO_setCallback (CONFIG_SPI_SLAVE_READY、slaveReadyFxn);
GPIO_enableInt (CONFIG_SPI_SLAVE_READY);
UART_WRITE (UART、"在从设备上配置中断\n"、sizeof ("在从设备上配置中断\n"));
/*创建一个信标;主器件将等待这个信标
*直到从设备就绪。 *
Semaphore_Params 参数;
ERROR_Block EB;
/* Init 参数*/
Semaphore_Params_init (¶ms);
ERROR_INIT (&EB);
/*创建信标实例*/
masterSem = Semaphore_create (0、¶ms、&EB);
if (masterSem ==空)
{
System_printf ("信标创建失败");
system_flush();
}
/*将 SPI 作为主器件打开*/
SPI_Params_init (&spiParams);
spiParams.frameFormat = SPI_POL0_PHA1;
spiParams.mode = SPI_MASTER;
spiParams.bitrate = 1000000;
masterSpi = SPI_open (Board_SPI0、&spiParams);
if (masterSpi == NULL){
UART_WRITE (UART、"初始化主 SPI\n"时出错、sizeof ("初始化主 SPI\n"时出错);
while (1);
}
否则{
UART_WRITE (UART、"Master SPI initialized\n"、sizeof ("Master SPI initialized\n"));
}
/*
*主器件已打开 CONFIG_SPI_MASTER;将 CONFIG_SPI_MASTER_READY 设置为低电平
*通知从属方。
*
GPIO_WRITE (CONFIG_SPI_MASTER_READY、0);
/*将消息复制到发送缓冲区*/
strncpy ((char *) masterTxBuffer、master_MSG、SPI_MSG_LENGTH);
对于(I = 0;I < MAX_LOOP;I++){
/*
*等待从器件准备好传输;从器件将拉取
* CONFIG_SPI_SLAVE_READY 低电平。
*
UART_WRITE (UART、"等待 MASTER_SEM\n"、sizeof ("等待 MASTER_SEM\n");
Semaphore_pend (masterSem、BIOS_wait_forever);
UART_WRITE (UART、"创建事务\n"、sizeof ("创建事务\n"));
/*初始化主 SPI 事务结构*/
masterTxBuffer[sizeof (master_MSG)- 1]=(i % 10)+'0';
memset ((void *) masterRxBuffer、0、SPI_MSG_LENGTH);
transaction.count = SPI_MSG_length;
transaction.txBuf =(void *) masterTxBuffer;
transaction.rxBuf =(void *) masterRxBuffer;
/*切换用户 LED、指示正在进行 SPI 传输*/
UART_WRITE (UART、"正在传输\n"、sizeof ("正在传输\n");
GPIO_TOGGLE (Board_LED1);
/*执行 SPI 传输*/
transferOK = SPI_transfer (masterSpi、事务);
sprintf (uartStr、"%d"、transferOK);
UART_WRITE (UART、"transfer ok ="、sizeof ("transfer ok ="));
UART_WRITE (UART、uartStr、sizeof (uartStr));
if (transferOK){
UART_WRITE (UART、"\n 已接收的主设备\n"、sizeof ("已接收的主设备\n");
}
否则{
UART_WRITE (UART、"\n 接收到成功的主设备\n"、sizeof ("接收到失败的主设备\n");
}
/*在开始下一个 SPI 传输前睡眠一位*/
Task_sleep (100);
}
SPI_CLOSE (masterSpi);
/*示例完成-将引脚设置为已知状态*/
GPIO_disableInt (CONFIG_SPI_SLAVE_READY);
GPIO_setConfig (CONFIG_SPI_SLAVE_READY、GPIO_CFG_OUTPUT | GPIO_CFG_OUT_LOW);
GPIO_WRITE (CONFIG_SPI_MASTER_READY、0);
UART_WRITE (UART、"Done!\n"、sizeof ("done!\n"));
}
如果您需要更多信息、请告诉我。 谢谢。
