以led驱动为例
驱动添加
相关头文件和宏定义
#include <rtthread.h>
#include <rtdevice.h>
#include "board.h"
#define LED2_PIN GET_PIN(E, 2)
#define LED3_PIN GET_PIN(G, 15)
#define LED4_PIN GET_PIN(B, 8)
先创建设备实例,然后使用相关函数创建,并且登录设备,因为没有具体设备类型就设置为了字符设备,可读写
int ledb2_config (void){
rt_device_t ledb2;
ledb2 = rt_device_create(RT_Device_Class_Char, 64);
if (ledb2 == NULL){
}
ledb2->init = ledb2_init;
ledb2->open = ledb2_open;
ledb2->close = ledb2_close;
rt_device_register(ledb2, "led2", RT_DEVICE_FLAG_RDWR);
return 0;
}
添加相关方法的函数
rt_err_t ledb2_init(rt_device_t dev){
rt_pin_mode(LED2_PIN, PIN_MODE_OUTPUT);
rt_kprintf("初始化成功!");
return 0;
}
rt_err_t ledb2_open(rt_device_t dev){
rt_pin_mode(LED2_PIN, PIN_MODE_OUTPUT);
/* 设置低电平 */
rt_pin_write(LED2_PIN, PIN_LOW);
rt_kprintf("led2 on!");
return 0;
}
rt_err_t ledb2_close(rt_device_t dev){
/* 设置电平 */
rt_pin_write(LED2_PIN, PIN_HIGH);
rt_kprintf("led2 close!");
return 0;
}
最后添加至预初始化函数
INIT_BOARD_EXPORT(ledb2_config);
驱动使用
void led2_init(void){
rt_device_t led2;
led2 = rt_device_find("led2");
if(led2 == NULL){
rt_kprintf("can not found device");
}
else{
rt_device_init(led2);
rt_device_open(led2, RT_DEVICE_OFLAG_OPEN);
}
}
MSH_CMD_EXPORT(led2_init, open led2);