119
个编辑
更改
tft显示实验结束
.bit_order = NRF_DRV_SPI_BIT_ORDER_MSB_FIRST, \
}
</syntaxhighlight>nrf_drv_spi_init函数是正式初始化spi函数。将配置好的config结构转入其中,第三,第四参数是回调函数参数。如果传入回调函数指针,将进行异步数据收发,调用收发函数将立即返回。数据接收完成后,调用回调函数。如果传入NULL,将进行阻塞模式,只有接收完成后,收发函数才会返回。 根据《'''谷雨显示接口原理说明'''》要求,要实现SPI发送函数,背光控制函数,数据命令控制函数等,方便显示屏驱动调用。<syntaxhighlight lang="c" line="1">//******************************************************************************// fn : BSP_LcdBL// // brife : set the LCD_BL_PIN pin level//// param : opt -> 0 OR 1//// return : nonevoid BSP_LcdBL(uint8_t opt){ nrf_gpio_pin_write(LCD_BL_PIN, opt? 1 : 0 );}//******************************************************************************// fn : BSP_LcdCD// // brife : set the LCD_MODE_PIN pin level//// param : opt -> 0 OR 1//// return : nonevoid BSP_LcdCD(uint8_t opt){ nrf_gpio_pin_write(LCD_MODE_PIN, opt? 1 : 0 );}//******************************************************************************// fn : BSP_LcdCs// // brife : set the LCD_BL_PIN pin level//// param : opt -> 0 OR 1//// return : nonevoid BSP_LcdCs(uint8_t opt){ //nrf_gpio_pin_write(SPI_SS_PIN, opt ? 1 : 0);} uint8_t BSP_LcdSend(uint8_t data){ spi_tmp = data; nrf_drv_spi_transfer(&spi, &spi_tmp, 1, NULL, 0); return NRF_SUCCESS;} uint8_t BSP_LcdSendMore(uint8_t* buf, uint16_t len){ //单次发送最大255个字节,这里做了相应的分包。 uint8_t cnt_max = len >> 7; uint8_t cnt_rest = len & 0x007F; uint8_t i = 0; if(cnt_max) { for( ; i < cnt_max ; i++) { nrf_drv_spi_transfer(&spi, buf + (i << 7), 128, NULL, 0); } } if(cnt_rest) { nrf_drv_spi_transfer(&spi, buf + (i << 7), cnt_rest, NULL, 0); } return NRF_SUCCESS;}</syntaxhighlight>其中BSP_LcdSendMore函数里,将数据包进行了分包处理,因为nrf_drv_spi_transfer的最大长度为255。实现上述函数后,在lcd_gpio.c文件中进行调用。 上述函数只是,LCD驱动运行前的准备。在调用任务显示函数前,一定要先调用GUI_Init函数,它将初始化LCD驱动相关的结构。
==== 实验现象 ====
硬件准备:
# Jlink-Lite仿真器或J-Link仿真器
# NRF52832DK评估板
# TFT-LCD-144或TFT-LCD-130显示屏
编译工程,点击IAR IDE工具栏中绿色三角仿真按钮,IAR便会将程序下载到nRF52832中,点击全速运行即可。此时屏幕上,便会交替显示红,绿,蓝三色,同时第一行显示“SPI lcd Test”字样。