2 uClinux嵌入式操作系统
操作系统选用uClinux。它是一个完全符合GNU(GNU’s Not Unix,自由软件基金会)/GPL(General Pulic License,通用公共许可证)公约的完全开放代码项目,是标准Linux的一个分支,现在由Lineo公司支持维护。它专门针对没有MMU的CPU,并且专为嵌入式系统做了许多小型化的工作。
UClinux经过对标准Linux内核的改动,形成了一个高度优化的、代码紧凑的嵌入式Linux。虽然它的体积很小,但uClinux仍然保留了Linux的大多数的优点,稳定、良好的移植性、优秀的网络功能、完备的对各种文件系统的支持以及标准丰富的API。它的主要特片如下:
①在linux-2.4.x/driver/char/Makefile添加1行:obj_$(CONFIG_SPI)+=SPI.0。在24行obj-y+=mem.o tty_io.o后加PI.o。
②在linux-2.4.x/driver/char/Config.in,添加1行:bool"SPI"CONFIG_SPI便于在make me nuconfig时选择。
③在linux-2.4.x/driver/char/mem.c在文件头部添加:#ifdef CONFIG_SPI /*编译时选择该项就执行SPI的初始化函数*/
extern void SPI_init(void);
#endif
在chr_dev_init()函数添加:#ifdef CONFIT_SPI
SPI_init();
#endif
④修改vendor/Samsung/4510b/Makefile,建立起设备节点。
在12~35行间,DEVICE部分添加内容SPI,c,29,0。SPI是设备名,c代表字符设备,29是SPI的主设备号,0是SPI的次设备号。⑤make menuconfig时选中SPI编译,然后直载。
启动后,会看到/proc/devinces中字符设备多了一项SPI 29。
S3C4510B有18个通用I/O口,其中高10位可设置为其它功能口。在该系统中,设置P8为中断接收线,P11模拟主机输出线MOSI,P12模拟主机时钟SCK,P13模拟主机输入线MISO。P8口用于接收PTR3000的发送请求信号。当P8口接收到请求信号时,系统进入中断处理。中断处理进程唤醒睡在睡眠队列SPI_WAIT上的读进程,读进程由P12口输出SCK信号并由P13口读入数据。值得说明的是,SPI不带中断线,在此用P8口做中断接收线是为了避免操作系统在没有进行SPI操作时不断向SCK线发时钟信号。因此,MSP430F147IPM必须另外与S3C4510B连一个引脚在请求发送数据时发出中断接收线是为了避免操作系统在没有进行SPI操作时不断向SCK线发时钟信号。因此,MSP430F147IPM必须另外与S3C4510B连一个引脚在请求发送数据时发出中断请求信号。实现过程如下:
Static wait_queue_head_wait; //休眠队列
//读函数
static ssize_t SPI_onlyread(struct file*file,char *buf,size_t count,loff_t *ppos)
{
interruptible_sleep_on(%26;amp;SPI_wait); //读进程睡眠等待读中断信号
if(count>BUFNUM)count=BUFNUM;
for(num=0;num[!--empirenews.page--]嵌入式家庭网关中SPI接口的软件模拟
2 uClinux嵌入式操作系统
操作系统选用uClinux。它是一个完全符合GNU(GNU’s Not Unix,自由软件基金会)/GPL(General Pulic License,通用公共许可证)公约的完全开放代码项目,是标准Linux的一个分支,现在由Lineo公司支持维护。它专门针对没有MMU的CPU,并且专为嵌入式系统做了许多小型化的工作。
UClinux经过对标准Linux内核的改动,形成了一个高度优化的、代码紧凑的嵌入式Linux。虽然它的体积很小,但uClinux仍然保留了Linux的大多数的优点,稳定、良好的移植性、优秀的网络功能、完备的对各种文件系统的支持以及标准丰富的API。它的主要特片如下:
①在linux-2.4.x/driver/char/Makefile添加1行:obj_$(CONFIG_SPI)+=SPI.0。在24行obj-y+=mem.o tty_io.o后加PI.o。
②在linux-2.4.x/driver/char/Config.in,添加1行:bool"SPI"CONFIG_SPI便于在make me nuconfig时选择。
③在linux-2.4.x/driver/char/mem.c在文件头部添加:#ifdef CONFIG_SPI /*编译时选择该项就执行SPI的初始化函数*/
extern void SPI_init(void);
#endif
在chr_dev_init()函数添加:#ifdef CONFIT_SPI
SPI_init();
#endif
④修改vendor/Samsung/4510b/Makefile,建立起设备节点。
在12~35行间,DEVICE部分添加内容SPI,c,29,0。SPI是设备名,c代表字符设备,29是SPI的主设备号,0是SPI的次设备号。⑤make menuconfig时选中SPI编译,然后直载。
启动后,会看到/proc/devinces中字符设备多了一项SPI 29。
S3C4510B有18个通用I/O口,其中高10位可设置为其它功能口。在该系统中,设置P8为中断接收线,P11模拟主机输出线MOSI,P12模拟主机时钟SCK,P13模拟主机输入线MISO。P8口用于接收PTR3000的发送请求信号。当P8口接收到请求信号时,系统进入中断处理。中断处理进程唤醒睡在睡眠队列SPI_WAIT上的读进程,读进程由P12口输出SCK信号并由P13口读入数据。值得说明的是,SPI不带中断线,在此用P8口做中断接收线是为了避免操作系统在没有进行SPI操作时不断向SCK线发时钟信号。因此,MSP430F147IPM必须另外与S3C4510B连一个引脚在请求发送数据时发出中断接收线是为了避免操作系统在没有进行SPI操作时不断向SCK线发时钟信号。因此,MSP430F147IPM必须另外与S3C4510B连一个引脚在请求发送数据时发出中断请求信号。实现过程如下:
Static wait_queue_head_wait; //休眠队列
//读函数
static ssize_t SPI_onlyread(struct file*file,char *buf,size_t count,loff_t *ppos)
{
interruptible_sleep_on(%26;amp;SPI_wait); //读进程睡眠等待读中断信号
if(count>BUFNUM)count=BUFNUM;
for(num=0;num[!--empirenews.page--]如果这篇内容对您有帮助,欢迎点赞支持!