·上一文章:基于DSP的嵌入式视觉客流检测系统
·下一文章:小型程控电路交换机的硬件设计
其中va_sys是一个结构体,包含了AT9lRM9200处理器内的全部寄存器,通过一条语句:AT91PS_SYS va_sys=(AT91PS SYS)AT91C_VA_BASE_SYS,把所有寄存器的最低地址赋给va_sys,这样结构体中的寄存器名称就和实际的地址对应起来了。注意:这里用到的地址都是经过映射过的虚拟地址,在实际运行中会通过处理器内部的MMU单元转换为实际的物理地址发往地址总线。上述代码中的AT91C_PI0_PBO等等是一些常数的宏定义用于寄存器赋值,比如:#define AT9lC_PIO_PBO(1<<0),它们定义在AT91RM9200.h头文件中。
在驱动程序中,file_operations是一个重要的结构体,通过它把针对设备的具体操作注册给内核的统一接口。结构体中全是函数指针,DSl302驱动程序中用到的函数有:open、release、ioctl,用于设备的打开与释放、设备的读写以及设备的控制。对DSl302的读写都是在dsl302_ioctl()中调用相应的读写函数实现的。
下面具体分析一下驱动程序中向DSl302发送单个字
代码中用到的at91_set_gpi0_value()函数定义在内核的Gpio.c文件中,最终是对10控制器的PIO_SODR(置位输出数据寄存器)或PIO_CODR(清零输出数据寄存器)赋值以使相应引脚输出需要的电平。
经过测试,短时间内误差不明显,但时钟芯片存在积累误差并且易受环境影响,连续几天运行下来,误差有数秒之多。所以,嵌入式系统需要通过某种方法定期使用标准时间向时钟芯片对时,以消除误差。下面要介绍的GPS接收机方案就可以做到这点。