SSI_IT 使用示例

例程路径: ls_sdk\examples\peripheral\ssi\ssi_it

一、程序基本配置及说明:

ssi_it示例通过中断的方式使用ssi传输数据,例程每10ms传输一组数据,在main中首先进行系统初始化和ssi初始化:

        sys_init_none();
        ssi_test_init();

ssi IO端口设置:

 	pinmux_ssi_clk_init(PB09);		/* CLK-------------PB09 */	
	pinmux_ssi_nss0_init(PB08);		/* SSN-------------PB08 */	
	pinmux_ssi_dq0_init(PA07);		/* MOSI------------PA07 */	
	pinmux_ssi_dq1_init(PA00);		/* MISO------------PA00 */

二、操作步骤及结果:

2.1 操作步骤

说明

SSI初始化结构体配置说明:

	SsiHandle.REG = LSSSI;										/*SSI 寄存器指针 */
	SsiHandle.Init.clk_div = 128;								/*设置时钟分频因子 */
	SsiHandle.Init.rxsample_dly = 0;							/*RX 采样延时 */
	SsiHandle.Init.ctrl.cph = SCLK_Toggle_In_Middle;			/*设置时钟相位CPH */
	SsiHandle.Init.ctrl.cpol = Inactive_Low;					/*设置时钟极性CPOL*/
	SsiHandle.Init.ctrl.data_frame_size = DFS_32_8_bits;		/*设置数据帧长度 */

SSI IT模式数据传输提供了4个API:

HAL_SSI_Transmit_IT:只能发送数据

HAL_SSI_Receive_IT: 只能接收数据

HAL_SSI_TransmitReceive_IT:可以同时发送和接收数据

HAL_SSI_TransmitReceive_HalfDuplex_IT: 使用半双工的方式发送和接收数据

HAL_SSI_Transmit_IT(SSI_HandleTypeDef *hssi,void *Data,uint16_t Count)
HAL_SSI_Receive_IT(SSI_HandleTypeDef *hssi,void *Data,uint16_t Count)
HAL_SSI_TransmitReceive_IT(SSI_HandleTypeDef *hssi,void *TX_Data,void *RX_Data,uint16_t Count)
HAL_SSI_TransmitReceive_HalfDuplex_IT(SSI_HandleTypeDef *hssi,void *TX_Data,uint16_t TX_Count,void *RX_Data,uint16_t RX_Count)

下面是HAL_SSI_TransmitReceive_IT API中各参数的说明:

/**
  * @brief  Transmit and Receive an amount of data in non-blocking mode with Interrupt
  * @param  hssi pointer to a SSI_HandleTypeDef structure that contains
  *               the configuration information for SPI module.
  * @param  TXData pointer to transmission data buffer
  * @param  RXData pointer to reception data buffer
  * @param  Count amount of data to be sent
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_SSI_TransmitReceive_IT(SSI_HandleTypeDef *hssi,void *TX_Data,void *RX_Data,uint16_t Count)


数据传输完成时会调用相应的callback函数:

void HAL_SSI_TxRxCpltCallback(SSI_HandleTypeDef *hssi)
{
	LOG_I("TXRX CMPLT: 0x%x, 0x%x, 0x%x, 0x%x", ssi_rx_buf[0],ssi_rx_buf[1],ssi_rx_buf[2],ssi_rx_buf[3]);
	ssi_txrx_flag = 1;
}

2.1.1 运行程序

SSI例程采用本地回环测试,将MOSI和MISO端口短接,编译后下载到开发板中,然后对开发板进行复位后观察log打印信息

2.2 测试结果

在本例程中,ssi_tx_buf是预定义的,ssi_tx_buf大小与ssi_rx_buf相同。SSI通过HAL_SSI_TransmitReceive_IT()发送ssi_tx_buf和接收ssi_rx_buf的数据,通过log打印信息检查接收数据的正确性。

可通过log打印信息监控接收数据:

按照代码的配置,将MOSI和MISO短接(本地回环测试)

连接log,运行测试程序,在测试正常时,应该能持续看到TXRX CMPLT的打印数据