tag 标签: lpc2136

相关博文
  • 热度 15
    2012-6-19 22:03
    2536 次阅读|
    0 个评论
    原创作品,转载请注明 作者:潇湘- ,自动化大三 (索漫科技linux驱动班学员) 一、目的        在LPC2136下,研究IOPIN置高电平与IOSET置高电平的区别。 二、缘由        在一系列实验时我发现,IOPIN寄存器在IODIR寄存器设置好方向后,也能实现输入和输出高低电平。和IOSET有所区别的是IOSET置高电平后要用IOCLR清除,而IOPIN只需要在变量赋值时重新覆盖即可。 三、实验过程 大家可以用小灯程序做个实验 在我的开发板中小灯的引脚如下图所示 故做如下实验 用IOPIN寄存器时 #define LED1  116 #define LED2  117 #define LED3  118 #define LED4  119 /**************************************************************************** * 名称:initSystem() * 功能:初始化IO ****************************************************************************/ void initSystem(void) {       IO1DIR = LED1|LED2|LED3|LED4;//设置方向       IO1SET = LED1|LED2|LED3|LED4 ;//高电平使灯灭 }          /**************************************************************************** * 名称:main() * 功能:初始化led,并实现led4闪烁的效果。 ****************************************************************************/ int main(void) {       initSystem();        while(1)     {               IO1PIN = LED1|LED2|LED3  ;//123灯灭,4灯亮        delay(40);        IO1PIN = LED1|LED2|LED3|LED4 ;//1234灯全灭       delay(40);     }       return 0; }        由此可见,用IOXPIN寄存器时发现LED4在闪烁,说明当把变量赋给IOXPIN寄存器时可以刷新 用IOSET寄存器时 int main(void) {       initSystem();        while(1)      {             IO1SET = LED1|LED2|LED3;         delay(40);          IO1SET= LED1|LED2|LED3|LED4 ;        delay(40);   }       return 0; } 发现LED4灯没有闪烁,说明IOXSET寄存器必须要IOCLR置一才能消去高电平。   下面请看数据手册中IOSET和IOCLR的解释     四、思考         数据手册告诉了我们。但是我发现IOPIN寄存器不只个状态寄存器,它也有别样的功能。程序在一定程度上可以简化,原来程序中,IOSET和IOCLR需要一起作用,如今只需要IOPIN一个寄存器就能解决了。 2012年6月19日                                              写于上海.松江             
  • 热度 25
    2012-4-4 12:36
    3112 次阅读|
    0 个评论
    每个mcu都有定时器功能,如果要实现在1秒,或者1毫秒,或1微妙等时间间隔的定时操作,则需要mcu提供的定时器功能。(在掌握了一种MCU的定时器原理,其他MCU的定时器操作就很好理解了),下面以philips的lpc2136(arm7)定时器0的匹配功能为例。 1:首先要搞清楚几个寄存器的作用 如果上面的关系搞清楚了,程序就很好写了! 2: TCR,MCR两个寄存器的控制原理 2.1关于TCR TCR 是使能位,为1时,同时使能“预分频计数器”和“定时器计数器”计数; 为0时,同时禁止“预分频计数器”和“定时器计数器”计数;TCR 是控制“预分频计数器”和“定时器计数器”在PCLK的上升沿同步复位; 2.2关于MCR LPC2114定时器0有四个匹配通道,我们这里只讲匹配通道0,即MR0. MCR 当该位为1,TC与MR0(匹配寄存器)匹配产生中断;当该位为0,TC与MR0(匹配寄存器)匹配中断禁止; MCR 当该位为1,TC与MR0(匹配寄存器)匹配将使TC复位;当该位为0,该特性被禁止; MCR 当该位为1,TC与MR0(匹配寄存器)匹配将使TC和PC停止计数;当该位为0,该特性被禁止。 3 接下来就可以等待中断了 对于一个新手来说也许你还是不知如何着手写程序,所以这就是入门的难处,当你对某个MCU会控制了,或者说入门了,那么再去写程序控制其他的MCU就很容易的,因为原理在那里,可以举一反三。 3.1 中断状态寄存器 其实,不管是那个MCU中的哪个控制器,如I2C,SPI,Ethernet,LCD等等,都有一个中断状态寄存器,有些控制器还有其他状态寄存器! Lpc2136中的定时器0就有T0IR(中断寄存器)来指示当前是哪个中断发生,用户就可以通过读这个寄存器来判断。   如:我们这里设置了匹配通道0,即MR0。我们可以在主程序中不断的读T0IR 位,如果为1则说明中断发生。 注意:在中断处理结束后必须通过对相应为写1才能复位中断,方便第二次中断发生。 4 如何写代码 一般分查询方式(polling)和中断方式(interrupt): 查询方式就是不停的去判断中断状态寄存器相关位是否置位,如果置位说明有中断发生。 中断方式就是通过MCU的中断控制器irq实现。 (未完,下文: 《4.1查询方式的相关代码》 )
  • 热度 17
    2012-4-4 12:33
    5689 次阅读|
    0 个评论
    8.1 认识串口原理图 这里所说的串口也叫RS232或这UART(Universal Asynchronous Receiver/Transmitter)。 下面的两个图是串口通信的两种应用场合。   三线制,用于一般的数据收发; 九线制,用于Modem(调制解调器)功能,应用于拨号上网设备,手机等通信设备中。 我们这里主要讨论三线制。 8.2 设置串口 也许很多人在XP下面用过串口,我们在“设备管理器”里面,有一个端口属性,里面就是串口设备,   这些基本的配置,在单片机和ARM里面也有。 8.2.1 波特率 这里第一个要设置的是串口波特率,波特率就是每秒传输的数据位数,用bps来表示。在LPC2136中,波特率通过公式 计算得到。 pclk指CPU的peripheral devices clock。 U0DLM是指UART0除法锁存器(Divisor Latch Register)的高八位; U0DLL是指UART0除法锁存器(Divisor Latch Register)的低八位; (注意:U0DLL的复位值为0) LPC2136 datasheet提供了一个表,我们可以根据这个表设置这两个寄存器的值就行了,很方便。 8.2.2 设置串口数据格式 我们一般设置8位数据位,1个停止位,无奇偶校验位,禁止间隔发送。 注意,我们在设置波特率之前必须,使能访问除数锁存。
  • 热度 21
    2012-4-4 12:31
    3544 次阅读|
    1 个评论
    ARM7中断原理的最基本部分与单片机是一样的,如果对单片机中断原理比较熟悉,再来理解ARM7的中断原理是顺理成章的事情。 1.中断向量表 下面以Philips的lpc2136为例进行比较深入的分析: 我们在用ads1.2调试开发板时,有一个startup.s的汇编程序,这个程序就是lpc2136得以运行的启动代码,是及其重要的一部分,蕴含着ARM7的精髓。 其中,有这样一段代码: AREA vectors,CODE,READONLY ENTRY ;interrupt vectors ;中断向量表 Vector_Init_Block LDR PC, Reset_Addr LDR PC, Undefined_Addr LDR PC, SWI_Addr LDR PC, Prefetch_Addr LDR PC, Abort_Addr DCD 0xb9205f80 LDR PC, LDR PC, FIQ_Addr Reset_Addr DCD Start_Boot Undefined_Addr DCD Undefined_Handler SWI_Addr DCD SWI_Handler Prefetch_Addr DCD Prefetch_Handler Abort_Addr DCD Abort_Handler Nouse DCD 0 IRQ_Addr DCD 0 FIQ_Addr DCD FIQ_Handler ;未定义指令 Undefined_Handler B Undefined_Handler ;软中断 SWI_Handler B SWI_Handler ;取指令中止 Prefetch_Handler B Prefetch_Handler ;取数据中止 Abort_Handler B Abort_Handler ;快速中断 FIQ_Handler STMFD SP!, {R0-R3, LR} BL FIQ_Exception LDMFD SP!, {R0-R3, LR} SUBS PC, LR, #4 下面的这个截图来自ads1.2安装后的“online book”里面(这里面有很多非常重要的知识,你不懂的任何疑问都可以在此找到答案,可惜很多人不知道这个好地方)   ARM体系设计有八种异常,并把所有现象用异常来表达,我们的代码任何时刻都在这八种异常中运行。 我们给开发板上电,这就是一种“异常”,这种异常用”Reset”来表示。 这八种异常对应八个地址: Reset(复位)=========0x00000000(当上电,或按下开发板的复位键时,程序跳到该地址运行) Undef(未定义指令)=========0x00000004(当程序指针访问地址出现未定义指令,程序跳到该地址运行) SWI(软件中断)=========0x00000008(当发生软件中断,程序跳到该地址运行) Prefetch Abort(预取指中止)=========0x0000000C(当预取值失败,程序跳到该地址运行) Data Abort(数据中止)=========0x00000010(当访问数据区失败,程序跳到该地址运行) Reserved(保留)===========0x00000014 IRQ===========0x00000018(当发生IRQ中断时,程序跳到该地址运行) FIQ(快速中断)========0x0000001C(当发生快速中断时,程序跳到该地址运行) 2 FIQ中断,向量IRQ,非向量IRQ区别 FIQ是指快速中断请求(Fast Interrupt reQuest),具有最高优先级,一般只声明一个中断源为FIQ,这样可以得到最快的相应速度,如果非要申请多个中断源为FIQ,那么当中断发生时,FIQ中断线程通过读取FIQ状态寄存器来判断当前发生的是那个中断。 向量IRQ(Vector IRQ)是指向量中断请求(Vector Interrupt ReQuest)。具有次高优先级。 非向量IRQ(NO_Vector IRQ)是指非向量中断请求。具有最低优先级。 (未完待续)
相关资源
  • 所需E币: 2
    时间: 2022-3-4 10:38
    大小: 209.49KB
    上传者: ZHUANG
    基于LPC2136的嵌入式实时机器人控制系统
  • 所需E币: 4
    时间: 2019-12-24 20:47
    大小: 1.68MB
    上传者: givh79_163.com
    LPC2131/2/4/6/8用户手册UM10120LPC2131/2/4/6/8UsermanualRev.3―4October2010UsermanualDocumentinformationInfoContentKeywordsLPC2131,LPC2132,LPC2134,LPC2136,LPC2138,LPC2131/01,LPC2132/01,LPC2134/01,LPC2136/01,LPC2138/01,LPC2000,LPC213x,LPC213x/01,ARM,ARM7,embedded,32-bit,microcontrollerAbstractLPC213xandLPC213x/01UsermanualNXPSemiconductorsUM10120LPC213xandLPC213x/01UMRevisionhistoryRevDate……