分类: LINUX
2011-02-09 15:40:36
一、驱动:
1)UART等地址 存放和定义在*.h 头文件中
(通过类似:#define UART_?? __REG(0x?? + 0x??)实现)
2)驱动主程序①_open 函数:打开串口、设置实验板寄存器(通过UART_??=0x??)
②_release函数:关闭端口、释放资源(内核函数_release)
③_read 函数:用于从陀螺仪读入数据,
先检查接收寄存器标志位(通过UART_?? & 0x??实现)。
分为AB俩种情况:
A:如果标志是1,则等待接收原数据;
B:如果标志是0,则直接读入buff
④_write 函数:用于向陀螺仪发出数据,
先检查发送寄存器标志位(通过UART_?? & 0x??实现):
A:如果标志是1,则等待发出新数据;
B:如果标志是0,则直接发出buff中现有数据;
⑤_ioctl 函数:将读入的数据写入文本中。(利用fwrite)
先检查是否有文本存在。
A:试读文本fopen("data.txt ","r")存在该文本则跳至步骤C,否则程序跳至步骤B
B:建立data.txt文本。(通过fopen("data.txt ","w+ ") )
C:向文本写入读取到值 fwrite(buff,strlen(buff),?,B函数)
⑥static struct file_operations结构,连接内核与驱动。
⑦static int __init 以下四个函数为驱动格式。
⑧static void __exit
⑨module_init(_init);
⑩module_exit(_exit);
二、测试程序:
1)open函数:启动设备文件
2)read和write函数:调用_read 和_write函数,收发控制字步骤为:
①首先要进入设置模式:
A:发送TX: FA FF 30 00 D1
B:串口接收数据为RX: FA FF 31 00 D0
②设置输出模式:(模式为calibration + orientation data)
A:发送TX: FA FF D0 02 00 06 29
B:串口接收RX: FA FF D1 00 30
③设置输出数据的格式:
(数据输出格式为Euler orientation output + sample counter)
A:发送TX: FA FF D2 04 00 00 00 05 26
B:串口接受数据为RX: FA FF D3 00 2E
④设置采样时间1 / 120 sec (= 120Hz):
A:发送命令内容为TX: FA FF 04 02 03 C0 38
B:串口接受数据为RX: FA FF 05 00 FC
⑤进入测量模式:
A:发送命令内容为TX: FA FF 10 00 F1
B:串口接受数据为RX: FA FF 11 00 F0
⑥开始接受数据:
A:串口接受数据为RX: FA FF 32 32 后面是50个字节的数据(包括36字节的calibration data+12字节的Euler orientation output+ 2字节采样值)最后是CS校验码,
3)ioctl函数:将收到的数据写入文本文档。