ARM+Linux 的仪器控制系统的设计模式分析
对于AT91RM9200利用如下转换函数获取虚拟地址,其中宏AT91_VA_BASE_SYS是系统虚拟基地址:
读写端口对于AT91RM9200还可使用专门函数
int at9 1_set_gpio_value(unsigned pin,int value),并包含头文件asm-arm/arch-at91/gpio.h。一般端口的访问在驱动模块初始化时申请资源,在卸载时释放资源,而对于I/O口的使能则在open方法中实现,相应的禁用在release方法中实现。
1.3 ioctl方法的实现
用户可以通过ioctl方法向内核发送各种命令,必要时传递参数,下面展示一个简单实例。
1.4中断控制实现
当外部信号的到来时刻不可预测时,使用轮询方式将使得效率极低,需要使用阻塞型中断实现。即没有中断信号到来时阻塞读进程,使其处于睡眠状态,当中断到来唤醒读进程,执行预定处理操作。
首先,在open方法中使用request_irq()安装中断处理程序,在release方法中释放。函数原型如下:
其中:参数irq为中断号;handler为ISR指针;flags为与中断管理有关的各选项字节掩码;dev_name即设备名;dev_id为中断信号线。
其次,ISR为申请中断时使用的参数名,假设为irq0_handler,定义原型如下:
评论