主题中讨论的其他器件: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")); }
如果您需要更多信息、请告诉我。 谢谢。