使用两个570芯片进行mibspi数据交互,一个主机,一个从机。目前根据例程能在一个芯片上实现mibspi自发自收,但是改成不是自发自收模式后,从机部分使用HAL Gode Gen不知道怎么进行配置,想配置成接收完指定数据后进入中断,另mibspi能实现全双工吗?就是发送数据的同时也收数据。期待您的回复。万分感谢。
Gorilla xu:
从机配置成接收完指定字大小后进入中断,例如接收完128字以后进入中断
Gorilla xu:
回复 Gorilla xu:
急!从机的中断源选择什么?
Eason Wang:
回复 Gorilla xu:
Move to herculus forum
Ken Wang:
首先根据SPI的协议,它在发送数据的同时,也是在接收数据的。它采用的是移位寄存器的操作方式。
要实现自发自首,通过HALCOGEN配置就行,需要注意的是从机的配置。从机的中断可以设置为接收/发送中断,或者是可以通过添加DMA中断的方式来产生接收中断。
谢谢
Gorilla xu:
回复 Ken Wang:
能提供更详细的配置说明及代码吗?例如从机怎么配置中断,怎么配置多少字进中断?我通过HALGOGEN配置不了mibspi的接收中断,RXINT的那根线勾选不上。最好能提供一份大致的代码例程。谢谢了
Gorilla xu:
回复 Ken Wang:
通过添加DMA中断方式接收数据也不会,希望能提供可参考代码。谢谢了
Ken Wang
首先根据SPI的协议,它在发送数据的同时,也是���接收数据的。它采用的是移位寄存器的操作方式。
要实现自发自首,通过HALCOGEN配置就行,需要注意的是从机的配置。从机的中断可以设置为接收/发送中断,或者是可以通过添加DMA中断的方式来产生接收中断。
谢谢
Ken Wang:
回复 Gorilla xu:
首先MIBSPI不能配置类似UART的发送或是接收中断。它的中断都是基于transfer group的。你在程序里面需要加入类似:
mibspiEnableGroupNotification(mibspiREG5,0,0);这样的语句来使能transfer group的中断操作。
关于HACLDOGEN的配置,首先作为从机,你不需要勾选master mode以及internal clock,然后在配置data format的时候,你需要根据主机的配置设置相应的波特率和数据长度;比较重要的是关于transfer group的配置,里面要选择正确的片选管脚,group的数据长度,最后就是关于MIBSPI的管脚需要用到的呃都要设置成SPI模式,而不是HGIO的模式。
谢谢
Ken Wang:
回复 Ken Wang:
关于MIBSPI的例程,其实主从机的配置,基本差不多。你可以参考一下下面的例程:
/* USER CODE BEGIN (0) */ #include "GIO.h" #include "mibspi.h" #include "pinmux.h" /* USER CODE END *//* Include Files */#include "sys_common.h" #include "system.h"/* USER CODE BEGIN (1) */ #define TG_LENGTH 8 uint16Tx_Data_SPI_1[8]; uint16Tx_Data_SPI_2[8]; uint16 Tx_Data_SPI_3[8]; uint16Rx_Data_SPI_1[8]; uint16Rx_Data_SPI_2[8]; uint16Rx_Data_SPI_3[8]; /* USER CODE END *//** @fn void main(void) *@brief Application main function *@note This function is empty by default. * *This function is called after startup. *The user can use this function to implement the application. *//* USER CODE BEGIN (2) */ /* USER CODE END */void main(void) { /* USER CODE BEGIN (3) */uint8 i;muxInit();gioInit();mibspiInit();mibspiEnableGroupNotification(mibspiREG1,0,0); // mibspiEnableGroupNotification(mibspiREG1,0,1); // mibspiEnableGroupNotification(mibspiREG1,0,2);_enable_IRQ();Tx_Data_SPI_1[0] = 0x0011;Tx_Data_SPI_2[0] = 0x0021;Tx_Data_SPI_3[0] = 0x0031;for(i=1;i<TG_LENGTH;i++){Tx_Data_SPI_1[i] = Tx_Data_SPI_1[i-1]+1;Tx_Data_SPI_2[i] = Tx_Data_SPI_2[i-1]+1;Tx_Data_SPI_3[i] = Tx_Data_SPI_3[i-1]+1;}mibspiSetData(mibspiREG1,0,Tx_Data_SPI_1); // mibspiSetData(mibspiREG1,1,Tx_Data_SPI_2); // mibspiSetData(mibspiREG1,2,Tx_Data_SPI_3);mibspiTransfer(mibspiREG1,0 ); // mibspiTransfer(mibspiREG1,1 ); // mibspiTransfer(mibspiREG1,2 );while(1){ //while(mibspiIsTransferComplete(mibspiREG1, 0)==1) //{ //mibspiGetData(mibspiREG1, 0, Rx_Data_SPI_1); //}} /* USER CODE END */ }/* USER CODE BEGIN (4) */ void mibspiGroupNotification(mibspiBASE_t *mibspi, uint32 group) { /*enter user code between the USER CODE BEGIN and USER CODE END. */switch(group){case 0:mibspiGetData(mibspiREG1, 0, Rx_Data_SPI_1);break;case 1:mibspiGetData(mibspiREG1, 1, Rx_Data_SPI_2);break;case 2:mibspiGetData(mibspiREG1, 2, Rx_Data_SPI_3);break;default:break;} }
谢谢
Ken Wang:
回复 Gorilla xu:
关于MIBSPI配合DMA的操作,这个在我们的HALCOGEN的安装路径下面的examples文件夹下面有例程的。
你可以参考一下。
谢谢
Gorilla xu:
回复 Ken Wang:
Ken Wang
首先MIBSPI不能配置类似UART的发送或是接收中断。它的中断都是基于transfer group的。你在程序里面需要加入类似:
mibspiEnableGroupNotification(mibspiREG5,0,0);这样的语句来使能transfer group的中断操作。
关于HACLDOGEN的配置,首先作为从机,你不需要勾选master mode以及internal clock,然后在配置data format的时候,你需要根据主机的配置设置相应的波特率和数据长度;比较重要的是关于transfer group的配置,里面要选择正确的片选管脚,group的数据长度,最后就是关于MIBSPI的管脚需要用到的呃都要设置成SPI模式,而不是HGIO的模式。
谢谢