RT_THread操作系统下的SPI驱动方式分为以下五个步骤:
1.定义SPI设备名称
#define AD7705_SPI_BUS "spi1" #define AD7705_SPI_DEV_NAME "spi10" 2.挂载SPI设备到SPI总线 rt_hw_spi_device_attach(ADC_SPI_BUS, ADC_SPI_DEV_NAME, GPIOA, GPIO_PIN_4);//首先将SPI设备挂载到SPI总线上 spi_dev_adc=(struct rt_spi_device *)rt_device_find(ADC_SPI_DEV_NAME); //查找是否有对应的设备 if(spi_dev_adc==RT_NULL) { rt_kprintf("has not find the spi device...\n"); } 3.配置SPI的工作模式 /***********配置SPI工作模式***********/ struct rt_spi_configuration cfg; cfg.data_width=8; cfg.mode=RT_SPI_MASTER|RT_SPI_MODE_3|RT_SPI_MSB; cfg.max_hz=160*1000; //SPI传输速度需要慎重考虑 rt_spi_configure(spi_dev_adc, &cfg); 4.SPI端口初始化 /****SPI的GPIO端口初始化***/ void adc_gpio_init(void) { __HAL_RCC_GPIOC_CLK_ENABLE(); rt_pin_mode(AD7705_DRDY, PIN_MODE_INPUT); //DRDY设置成输入模式 rt_pin_mode(AD7705_RESET, PIN_MODE_OUTPUT); //RESET设置成输出模式 rt_pin_write(AD7705_RESET, PIN_LOW); //先复位,然后等待一段时间,再将引脚拉高 rt_thread_mdelay(100); rt_pin_write(AD7705_RESET, PIN_HIGH);
} 5.进行数据传输 void adc_reg_write(rt_uint8_t cmd) { struct rt_spi_message msg1;
/**************发送数据******************/ msg1.send_buf=&cmd; msg1.recv_buf=RT_NULL;//只进行发送工作 msg1.length=1; //发送的数据长度为1个字节 msg1.cs_take=1; //发送数据之前首先将CS片选信号拉低 msg1.cs_release=1; //发送数据结束之后将CS信号拉高 msg1.next=RT_NULL;
rt_spi_transfer_message(spi_dev_adc, &msg1); }
|