完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近一周在调试spi的外接设备,spi一共多使用29 30 31 32 四个主要接口,如何器件直接中断可以加外部中断触发。
函数使用API里的函数库。自己研究配置了一些。这周件到了,也使用上了。 器件插上效果挺好。 还有板子运行总有些小毛病,有点不方便。刷写时建议在任务管理器里清空占有COM口的任务。 代码配置可能有不足和瑕疵,大家借鉴有用的就好。 #include "hal.h" #include "system_mt7687.h" #include "top.h" #include "spi_init.h" #include "inttypes.h" #include "CMSIS.h" uint32_t send_length = 1; uint8_t * receive_buffer; uint32_t receive_length = 2; uint8_t * send_data;//发送数据 uint32_t clock_frequency = 1000000; //频率 uint8_t TxByte; //SPI主时钟频率设置,范围从30000HZ到60000000HZ。 void spi_init() { hal_gpio_status_t ret; // hal_pinmux_status_t ret_pinmux_status; hal_spi_master_config_t spi_config; //************ //引脚初始化 ret = hal_gpio_init(HAL_GPIO_29); if (HAL_GPIO_STATUS_OK != ret) { log_hal_error("hal_gpio_init 29 failedrn"); hal_gpio_deinit(HAL_GPIO_29); return; } ret = hal_gpio_init(HAL_GPIO_30); if (HAL_GPIO_STATUS_OK != ret) { log_hal_error("hal_gpio_init 30 failedrn"); hal_gpio_deinit(HAL_GPIO_30); return; } ret = hal_gpio_init(HAL_GPIO_31); if (HAL_GPIO_STATUS_OK != ret) { log_hal_error("hal_gpio_init 31 failedrn"); hal_gpio_deinit(HAL_GPIO_31); return; } ret = hal_gpio_init(HAL_GPIO_32); if (HAL_GPIO_STATUS_OK != ret) { log_hal_error("hal_gpio_init 32 failedrn"); hal_gpio_deinit(HAL_GPIO_32); return; } hal_gpio_init(HAL_GPIO_28); hal_pinmux_set_function(HAL_GPIO_29, HAL_GPIO_29_SPI_MOSI_M_CM4); hal_pinmux_set_function(HAL_GPIO_30, HAL_GPIO_30_SPI_MISO_M_CM4); hal_pinmux_set_function(HAL_GPIO_31, HAL_GPIO_31_SPI_SCK_M_CM4); hal_pinmux_set_function(HAL_GPIO_32, HAL_GPIO_32_GPIO32); hal_pinmux_set_function(HAL_GPIO_28, HAL_GPIO_28_GPIO28); //参数 spi_config.bit_order = HAL_SPI_MASTER_MSB_FIRST; spi_config.slave_port = HAL_SPI_MASTER_SLAVE_0; spi_config.clock_frequency = clock_frequency; spi_config.phase = HAL_SPI_MASTER_CLOCK_PHASE1; spi_config.polarity = HAL_SPI_MASTER_CLOCK_POLARITY1;//spi初始化 hal_spi_master_send_and_receive_config_t spi_send_and_receive_config; spi_send_and_receive_config.receive_buffer = receive_buffer; spi_send_and_receive_config.send_data = send_data; spi_send_and_receive_config.send_length = send_length; spi_send_and_receive_config.receive_length = receive_length; ret = hal_spi_master_init(HAL_SPI_MASTER_0, &spi_config); if (HAL_SPI_MASTER_STATUS_OK == ret) { log_hal_info("means this function return successfully. n");//表示此函数成功返回 } else if (HAL_SPI_MASTER_STATUS_ERROR== ret) { log_hal_info("spi master init means function errorn");//表示函数错误; return; } else if (HAL_SPI_MASTER_STATUS_ERROR_BUSY== ret) { log_hal_info("spi master init means this port of SPI master is busy and not available for usen");//表示SPI主机的此端口正忙,不可使用; return; } else if (HAL_SPI_MASTER_STATUS_ERROR_PORT== ret) { log_hal_info("spi master init means master_port parameter is an invalid port number;n");//表示master_port参数是无效的端口号 return; } else { log_hal_info("spi master init means an invalid parameter is given by usern");//表示用户提供的参数无效; return; } } ****************************************************************************************************************** 下面为spi发送和接受函数。配置到应用里。 ******************************************************************************************************** ret= hal_spi_master_send_polling(HAL_SPI_MASTER_0, send_data, 1); //轮询模式发送数据 if (HAL_SPI_MASTER_STATUS_ERROR== ret) { log_hal_info("spi master send means the byte_order parameter is not configured rightly for the FIFO mode;n");//表示byte_order参数未正确配置为FIFO模式; } else if (HAL_SPI_MASTER_STATUS_ERROR_BUSY== ret) { log_hal_info("spi master send means this port of SPI master is busy and not available for usen");//表示SPI主机的此端口正忙,不可使用; return; } else if (HAL_SPI_MASTER_STATUS_ERROR_PORT== ret) { log_hal_info("spi master send means master_port parameter is an invalid port numbern");//表示master_port参数是无效的端口号;,不可使用; return; } else if (HAL_SPI_MASTER_STATUS_INVALID_PARAMETER== ret) { log_hal_info("spi master send means an invalid parameter in spi_send_and_receive_config is givenn");//表示spi_send_and_receive_config中的无效参数; return; } else{ log_hal_info("spi master send means this function return successfullyn");//表示此函数成功返回。 return; } //此功能在FIFO模式下同时发送和接收数据。 //此功能在传输完成前不会返回。 //用户应该判断在发送命令期间接收的数据是否有效,并且此信息可以从SPI器件的数据手册获得。 uint8_t spi_read_write_e( uint8_t TxByte ) { * send_data = TxByte; hal_gpio_status_t ret; hal_spi_master_send_and_receive_config_t spi_send_and_receive_config; ret = hal_spi_master_send_and_receive_polling(HAL_SPI_MASTER_0, &spi_send_and_receive_config);//轮询模式同时发送和接收数据 if (HAL_SPI_MASTER_STATUS_ERROR== ret) { log_hal_info("spi master send and receive means the byte_order parameter is not configured rightly for the FIFO mode;n");//表示byte_order参数未正确配置为FIFO模式; } else if (HAL_SPI_MASTER_STATUS_ERROR_BUSY== ret) { log_hal_info("spi master send and receive means this port of SPI master is busy and not available for usen");//表示SPI主机的此端口正忙,不可使用; } else if (HAL_SPI_MASTER_STATUS_ERROR_PORT== ret) { log_hal_info("spi master send and receive means master_port parameter is an invalid port numbern");//表示master_port参数是无效的端口号;,不可使用; } else if (HAL_SPI_MASTER_STATUS_INVALID_PARAMETER== ret) { log_hal_info("spi master send and receive means an invalid parameter in spi_send_and_receive_config is givenn");//表示spi_send_and_receive_config中的无效参数; } else{ log_hal_info("spi master send and receive means this function return successfullyn");//表示此函数成功返回。 } return * receive_buffer; } //spi关闭函数 ret=hal_spi_master_deinit(HAL_SPI_MASTER_0); if (HAL_SPI_MASTER_STATUS_ERROR_PORT==ret ) { log_hal_info("spi master deinit means master_port parameter is an invalid port numbern");//表示master_port参数是无效的端口号; } else{ log_hal_info("spi master deinit means this function return successfully. n");//表示此函数成功返回。 return; } // 循环里需要放判断语句,设置个中断引脚,adc获取中断向量。 // 引脚关闭 // hal_gpio_deinit(HAL_GPIO_29); // hal_gpio_deinit(HAL_GPIO_30); // hal_gpio_deinit(HAL_GPIO_31); // hal_gpio_deinit(HAL_GPIO_32); // hal_gpio_deinit(HAL_GPIO_28);
|
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
493 浏览 0 评论
【KV260视觉入门套件试用体验】四、KV260 视觉入门套件和固件更新
805 浏览 0 评论
【KV260视觉入门套件试用体验】Vitis AI Library体验之OCR识别
644 浏览 0 评论
【KV260视觉入门套件试用体验】Vitis AI 通过迁移学习训练自定义模型
816 浏览 0 评论
【KV260视觉入门套件试用体验】KV260系列之Petalinux镜像+Resnet 50探索
644 浏览 0 评论
【AMD KV260视觉入门开发套件试用】4、简单几步体验ubuntu 20.04.3 LTS运行人员检测应用
1366浏览 1评论
300浏览 1评论
【KV260视觉入门套件试用体验】老刘记事儿KV260初体验之Micro-SD选型提速研究(三)
514浏览 1评论
4255浏览 1评论
【KV260视觉入门套件试用体验】KV260部署yolov3实现车辆和行人检测
1848浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-24 10:55 , Processed in 0.586269 second(s), Total 71, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号