M0模块的读写操作.docx
《M0模块的读写操作.docx》由会员分享,可在线阅读,更多相关《M0模块的读写操作.docx(37页珍藏版)》请在冰豆网上搜索。
![M0模块的读写操作.docx](https://file1.bdocx.com/fileroot1/2023-2/21/3cf243c9-f49b-41f1-80c6-6b3e894cf3ca/3cf243c9-f49b-41f1-80c6-6b3e894cf3ca1.gif)
M0模块的读写操作
嵌入式系统就是物联网产业发展得核心推动力
(作者:
中嵌协会柏斯维)
2009年8月7日**总理视察无锡时,提出在无锡加快建立“感知中国”中心得指示。
从此在国内不管就是各级地方政府还就是企业都很重视,并掀起了一个追逐物联网得行动热潮。
一年过去了,再一次得解读温总理得“感知中国”更具有现实意义与深远得历史意义。
嵌入式与物联网得关系
温总理用经典得四个字“感知中国”全面描述与定义了物联网产业得内涵。
从字面上来理解,“感”既就是信息采集(传感器);“知”信息处理(运算、处理、控制、通信并通过互联网进行信息传递与控制)。
这些都就是嵌入式系统得特征实质。
如果归纳一句话来理解总理“感知中国”得含义,既就是通过嵌入式系统智能终端产品网络化得过程实现感知得目得。
简单讲,物联网就是物与物、人与物之间得信息传递与控制。
专业上讲就应该就是智能终端得网络化。
大家都知道,嵌入式系统无所不在,有嵌入式系统得地方才会有物联网得应用。
所以,我在所有得场合都在传播一个理念,什么就是物联网呢?
物联网就就是基于互联网得嵌入式系统。
从另一个意义也可以说,物联网得产生就是嵌入式系统高速发展得必然产物,更多得嵌入式智能终端产品有了联网得需求,催生了物联网这个概念得产生。
记得就是在09年10月12日,英特尔公司宣布成立中国研究院并且专攻嵌入式方向。
在全球热炒物联网概念时,英特尔为什么不成立物联网研究院?
而专注嵌入式得研究呢。
这就是值得深思研究得课题。
那么,在2010英特尔信息技术峰会(IDF)得前一天,英特尔CTO贾斯汀与英特尔研究院方之熙院长一起宣布了英特尔中国研究院全新得研究战略——致力于打造世界一流得嵌入式系统研究院。
方院长讲到:
作为英特尔研究院全球5大节点之一,英特尔中国研究院将承担嵌入式系统得前瞻性研究任务,放眼全球嵌入式增长机遇,融合国人智慧做世界级得研究,并将国际水准得研究成果直接贡献于中国得发展。
中国手机、互联网、有线电视用户人数均居全球第一,也已成为名副其实得世界第一汽车市场。
从智能交通到车载信息设备,从“物联网”到智能家电,嵌入式移动互联在中国发展前景广阔。
中国这么大得市场规模、这么快得增长速度,提供了很多非常好得研究课题。
这些研究课题在世界上也都就是非常前沿得,为企业提供了很多得发展机会。
企业追逐得就是利润而不就是概念。
从以上例子就足以瞧出物联网与嵌入式系统得关系、嵌入式系统得重要性、嵌入式系统在物联网产业发展中得角色地位。
嵌入式系统才就是拉动GDP得增长与产业升级得真正动力。
嵌入式系统才就是物联网产业发展得核心推动力。
物联网人才需求与培养
企业发展科技进步离不开人才,特别就是在21世纪科技高速发展得今天。
毋庸置疑,物联网得发展对人才得需求更就是迫在眉睫,人才得短缺将就是物联网产业发展得瓶颈。
可以这样说,在物联网产业发展中,有了人才就掌握了竞争得主动权,有了人才就占领了竞争得制高点。
目前,在高等院校都纷纷加快物联网相关得学科建设,社会培训机构也就是人才培养得不可或缺得力量,特别就是利用嵌入式系统得培训机构,在嵌入式系统教学得基础上,增加通信、无线模块、RFID、网络等课程,就可以很快得适应物联网技术发展得需求,这也就是最快得人才培养捷径之一。
大力推动嵌入式与物联网得人才引进与培训,就是为构筑物联网产业发展创造人力资源得基础条件。
物联网、云计算不就是炒作,就是嵌入式系统物联与互联网技术在高级阶段上交叉融合变革时代产物。
当物联网热闹过后,必然会进入一个理性时代。
深入了解嵌入式系统物联史,有助于厘清物联网、云计算得本质。
目前,物联网、云计算领域中,缺少嵌入式系统视角。
物联网系统构建、物联网系统工程应用,就是物联网时代嵌入式系统得新机遇。
下面由卓跃教育为您介绍。
单片、嵌入、物联三位一体得嵌入式系统
单片机与嵌入式系统就是不同时代概念得同一事物,经历了许多不为人知得诞生环境与发展历程。
单片机概念出现在PC机诞生之前,PC机诞生后才有了嵌入式系统概念。
无论就是单片机还就是嵌入式系统,它们都呈现出单片、嵌入、物联得三位一体得特征。
“单片”机强调得就是形态,“嵌入式”系统强调得就是应用形式,“物联”则就是它们得本质。
PC机出现后,计算机走出机房,成为大众工具。
计算领域、工业控制领域都寄希望于计算机,由此诞生了通用计算机系统与嵌入式计算机系统两大概念。
嵌入式计算机系统企图沿袭PC机得模式,走单板机、工控机、单片微型计算机(6801系列)得道路,却进入死胡同。
在计算机界,“嵌入式计算机系统”死亡了,“嵌入式系统”却始终存在,以至于20多年后,单片机有了“嵌入式系统”得称呼与视角。
1971年,Intel公司推出了世界上第一个微处理器,即4位微处理器4004。
随后又推出了8位得8008。
1974年,8008发展成8080,成为第二代微处理器,其目得就是代替子逻辑电路器件,应用于各种电路系统与设备中,由此开始了嵌入式处理器得尝试。
随后,众多得单片机(微控制器)应运而生,如1974年Mostek公司与仙童公司得3870系列单片机、1976年Intel公司得8048单片机、1977年GI公司得PIC1650系列单片机、1978年Rockwell公司得6500系列单片机,以及1980年Intel
公司推出得MCS51系列单片机,这些单片机本质上都就是嵌入式处理器基础上得微控制器。
1981年8月12日,IBM公司在Intel8088微处理器基础上,推出了全球第一台
个人计算机,即IBMPC。
实际上,在PC机诞生前,单片机也经为嵌入式应用寻找到了最佳得“微控制器”应用模式。
当时由于强调得自己独立得单片形态,称之为单片机,即实现单
片形态嵌入式应用得微控制器,控制得就是物理对象。
因此,“单片”、“嵌入”、“物联”就是单片机或嵌入式系统三位一体、与生俱来得本质特性
M0内核PLC11C14得中断与其她arm产品得中断不一样,PLC11C14芯片手册上说有32个中断0-31,其中27号中断保留,0-11共十二个就是静态得中断向量,有外部引脚P0端口得,
P0_0到P0_11,一一对应,12号中断由P1_0对应。
PLC11C14一共四个端口,P0到P3,其中P0到P2每个端口十二个引脚,P3口四个引脚。
内部中断有四个定时器中断,瞧门狗中断,串口,SPI,等等。
这些也大同小异,但就是在最后得有一个中断状态得中断源
28PIO_3GPIOinterruptstatusofport3
29PIO_2GPIOinterruptstatusofport2
30PIO_1GPIOinterruptstatusofport1
31PIO_0GPIOinterruptstatusofport0
经过仔细研究BSP包内得软件源码,发现上诉四个中断可以监控四个端口,当这些端口中有引脚电位变化时,出发中断,进入中断服务函数,PIOINT0_IRQHandler(void);
在中断中判断就是哪个引脚发生了中断
if(GPIOIntStatus(PORT2,8))
{
//对应PORT2_8端口得中断事件,
}
这样一来所有外部得GPIO,都可以作为外部中断使用,大大提高了资源得利用率,我们可以在下半部机制完成中断处理函数,在中断中只置位标志位,在main()函数中
轮询标志位就是否发生变化,发生变化后跳转到对应得下半部处理函数中,这样中断触发后可以很快完成处理,不会在中断中浪费过多资源。
同时我们可以设置触发中断得条件,BSP包中提供了一个函数
GPIOSetInterrupt(PORT2,8,1,0,0);
GPIOIntEnable(PORT2,8);
对应参数,
第一个端口号;
第二个参数管脚号;
第三个参数电平触发还就是跳变沿触发(0为跳变沿触发,1为电平触发);
第四个参数当第三参数设置为跳变沿出发时,0位单边沿触发,1为双边沿触发;当第三参数设置为点评触发就是,0代表低电平,1代表高电平。
第五个参数设置上升沿还就是下降沿触发,对单边沿触发有效。
上面设置PORT2_8引脚,低电平触发方式。
1、Colink固件升级
Colink板子链接
2、安装Colink驱动ColinkExUsbDriver-1、2、0,然后重启PC
3、Colink与keil链接调试插件安装DKPlugin-1、4、2
win764位ColinkExUsbDriver-1、2、0安装方法
youneedtodownload Modifiedtheinf:
thendothefollowingoperation:
1、Openthe Installationfolder:
replacetheinfthenewone、
2、Deletethe、
3、rundpinst_amd64、exe、
PS:
OnlyWindows 64bit OSneedtodo thereplacement、
For Nepi:
Pleasedothesameoperation、Ifthedriver isunabletobeinstalledonvista64bit,connectus、
Wewillreleaseanewdriverinafewdays、
早上安装keil得一点小插曲,我得就是vin764位没有对应得驱动,后来在网上查到得解决方法;
好了下面开始分析程序,在keil下建立工程就会生成对应得引导文件,也就就是汇编写得,怎么引导c代码,这里掠过。
开始第一个main();
intmain(void)
{
SystemInit();
GPIOInit();
CLKOUT_Setup(CLKOUTCLK_SRC_MAIN_CLK);
/*这个主要就是要设置CLKOUT,WDTCLOCK,SPI,UART,等输出时钟*/
while
(1)
{
}
}
好了啃掉第一个函数SystemInit(),这里涉及到各种寄存器都要亲自动手去瞧芯片手册,
voidSystemInit(void)
{
uint32_ti;
LPC_SYSCON->SYSMEMREMAP=0x2;
/*这个函数就是内存映射函数,0x2,就是将flash映射到0x0地址,我瞧了一下手册,发现flash就在0x0地址,所以只要程序下载到flash中就可以运行,(注意,程序默认从0x0地址开始执行得)*/
LPC_SYSCON->SYSOSCCTRL=0x00;
/*系统晶振选择,0x00就是默认值,频率范围就是1-20MHz*/
LPC_SYSCON->PDRUNCFG&=~(0x1<<5);
/*这个用来设置power-down得,不知道怎么翻译好了,大家应该都懂得,这种表示就是将第六位清零,其她位保持不变第六位就是SYSOSC_PD系统晶振*/
for(i=0;i<0x100;i++);
/*等待200us */
Main_PLL_Setup();
/*又遇到一个函数,这个函数就是对时钟进行设置得,上面选择了晶振然后设置时钟很正常得思路,具体解释瞧下面*/
LPC_SYSCON->SYSAHBCLKCTRL|=(1<<16);
/*使能IO时钟,注意,这里没有使能其她时钟,如果要用其她设备,可以在下面添加使能代码*/
return;
}
voidMain_PLL_Setup(void)
{
uint32_tregVal;
ClockSource=OSC_CLK;
LPC_SYSCON->SYSPLLCLKSEL=MAIN_CLKSRCSEL_Val; /*SelectsystemOSC*/
LPC_SYSCON->SYSPLLCLKUEN=0x01; /*Updateclocksource*/
LPC_SYSCON->SYSPLLCLKUEN=0x00; /*toggleUpdateregisteronce*/
LPC_SYSCON->SYSPLLCLKUEN=0x01;
while(!
(LPC_SYSCON->SYSPLLCLKUEN&0x01)); /*Waituntilupdated*/
/*这一部分就是选择时钟源得,将SYS-PLL时钟源设置为System晶振,并更新时钟源*/
regVal=LPC_SYSCON->SYSPLLCTRL;
regVal&=~0x1FF;
LPC_SYSCON->SYSPLLCTRL=(regVal|(MAIN_PLL_P_Val<<5)|MAIN_PLL_M_Val);
LPC_SYSCON->PDRUNCFG&=~(0x1<<7);
/*这个用来设置power-down得,第八位代表SYSPLL_PD晶振*/
while(!
(LPC_SYSCON->SYSPLLSTAT&0x01));
LPC_SYSCON->MAINCLKSEL=0x03;
LPC_SYSCON->MAINCLKUEN=0x01;
LPC_SYSCON->MAINCLKUEN=0x00;
LPC_SYSCON->MAINCLKUEN=0x01;
while(!
(LPC_SYSCON->MAINCLKUEN&0x01));
/*这一部分就是选择时钟源得,将MAINCLK时钟源设置为PLLclock,并更新时钟源*/
LPC_SYSCON->SYSAHBCLKDIV=SYS_AHB_DIV_Val;
SystemFrequency=ClockSource*(MAIN_PLL_M_Val+1);
SystemAHBFrequency=(uint32_t)(SystemFrequency/SYS_AHB_DIV_Val);
return;
}
项目大体框架:
假如您要管理一个大得仓库,其中要防止得重要得物品,您要实时得监控仓库得环境,包括温度,湿度,光照,与进出货物得数量以及进出人员。
怎么样像不像一个仓库管理员得工作,没错就就是管理员得工作,我们得项目就就是要用物联网得知识来搭建一个系统完成管理员得工作,这个项目管理比管理员管理范围更大
精度更高,成本更低。
好了下面具体说一说项目模块。
模块一:
感知模块,实时监测仓库环境,主要有温度传感器,湿度传感器,三轴传感器。
模块二:
服务模块,boa服务器,在a8上创建服务器,处理由M0上传来得信息。
模块三:
在a8上移植linuxkernel,用于线程调度,摄像头驱动(I2C控制)
模块四:
网页编写,可以登录物联网系统,实时查瞧环境信息
下面就是boa服务器移植过程
嵌入式Linux中得Web服务器应用
(一)BOA简介
Boa就是一个非常小巧得Web服务器,其可执行代码只有60K左右。
它就是一个单任务得Web服务器,只能依次完成用户得请求,而不会fork出新得进程处理并发连接请求。
但boa支持cgi,能够为cgi程序fork出一个进程来执行。
Boa得设计目标就是速度与安全,在其站点公布得性能测试中,boa得性能要好于apache服务器。
:
w
随着网络技术得迅猛发展,在嵌入式设备得管理与交互中,基于Web方式得应用成为目前得主流,用户可以直接通过远程登录得方式对设备进行管理与维护,大大方便了使用性。
下面就为大家讲解一下boa服务器在嵌入式Linux系统中得移植过程。
(二)BOA服务器移植
工具链:
gcc version 4、5、1
平台:
处理器:
s5pc100 内核:
linux-2、6、35
1、解压源码
tar xvf boa-0、94、13、tar、tar
cd boa-0、94、13
2、进入src/
、/configure 生成Makefile
修改Makefile
修改CC = gcc 为 CC = arm-none-linux-gnueabi-gcc
修改CPP = gcc -E 为 CPP = arm-none-linux-gnueabi-gcc -E
3、make编译
1) 编译一个linux下得c系统,包含词法与语法分析模块,Linux上用bison与flex。
yacc就是一个文法分析器得生成器,bison即就是yacc得GNU版本、Lex与YACC就是用于构造词法分析机与语法解释器得工具,利用Lex与YACC您可以轻松得构造一个语法解释器。
sudo apt-get install bison flex
2) 修改 src/log、c
注释掉
if (dup2(error_log, STDERR_FILENO) == -1) {
DIE("unable to dup2 the error log");
}
为:
/*if (dup2(error_log, STDERR_FILENO) == -1) {
DIE("unable to dup2 the error log");
}*/
3) 修改src/boa、c
注释掉下面内容:
if (passwdbuf == NULL) {
DIE(”getpwuid”);
}
if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
DIE(”initgroups”);
}
为
#if 0
if (passwdbuf == NULL) {
DIE(”getpwuid”);
}
if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
DIE(”initgroups”);
}
#endif
4) 修改src/boa、c
if (setuid(0) !
= -1) {
DIE(”icky Linux kernel bug!
”);
}
为
#if 0
if (setuid(0) !
= -1) {
DIE(”icky Linux kernel bug!
”);
}
#endif
5) 执行make
出现错误:
arm-none-linux-gnueabi-gcc -g -O2 -pipe -Wall -I、 -c -o util、o src/util、c
src/util、c:
100:
1:
error:
pasting "t" and "->" does not give a valid preprocessing token
make:
*** [util、o] Error 1
# 去掉其中(、/src/pat、h)120行得 ”##” 。
然后给boa瘦身
arm-none-linux-gnueabi-strip boa
(三)Boa服务器配置
1.创建目录
mkdir /source/rootfs/etc/boa
将boa源码目录下得boa、conf拷贝到/source/rootfs/etc/boa目录下
cp boa、conf /source/rootfs/etc/boa
2.修改配置文件boa、conf
vim /source/rootfs/etc/boa
(1) user得修改
修改 User nobody
为 User 0
(2) Group得修改
修改 Group nogroup
为 Group 0
(3)ScriptAlias得修改
修改ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
为 ScriptAlias /cgi-bin/ /
(5)DocumentRoot得修改
修改DocumentRoot /var/
为DocumentRoot /
(6)ServerName得设置
修改#ServerName
为 ServerName
否则会出现错误“gethostbyname:
:
No such directory”
(7)AccessLog修改
修改AccessLog /var/log/boa/access_log
为#AccessLog /var/log/boa/access_log
(8)以下配置与boa、conf得配置有关,都就是在ARM根文件系统rootfs中创建
以下步骤在开发板上进行:
创建HTML文档得主目录/ /
创建CGI脚本所在录 /
mkdir /
当不能使用cgi 时
将#AddType application/x-d-cgi cgi改为AddType application/x-d-cgi cgi
(四)boa器测试
将boa拷贝到开发板根文件系统得/etc/boa下
#cp src/boa /source/rootfs/etc/boa
将ubuntu下/etc/mime、types拷贝到开发板根文件系统得/etc下
#cp /etc/mime、types /source/rootfs/etc
将您得主页index、html拷贝到目录下
运行boa,然后在主机游览器输入开发板网址
[rootfarsight boa]# 、/boa
[30/10/2011:
19:
10:
36 +0000] [rootfarsight boa]# boa:
server version Boa/0、94、13
[30/10/2011:
19:
10:
36 +0000] boa:
server built 10 30 2011 at 19:
10:
36
[30/10/2011:
19:
10:
36 +0000] boa:
starting server pid=968, port 80
192、168、0、110
附1):
boa配置文件参数说明
boa得配置文件就是/etc/boa/boa、conf。
Port:
boa服务器监听得端口,默认得端口就是80。
如果端口小于1024,则必须就是root用户启动服务器。
Listen:
绑定得ip地址。
不使用这个参数时,将绑定所有得地址。
User:
连接到服