您的位置 首页 元件

Cortex-M3学习日志(二)– 按键试验

有输出总会有输入,今天测试一下按键的功能,第一节已经说过了与GPIO端口相关的寄存器,这里不在重复,想要从端口读取数据,首先把FIODIR这

有输出总会有输入,今日测验一下按键的功用,第一节现已说过了与GPIO端口相关的寄存器,这儿不在重复,想要从端口读取数据,首先把FIODIR这个寄存器设置为输入,再从FIOPIN寄存器读取数据就能够了,这个寄存器具有读写功用。下面说一下这个试验的电路图,如下所示:

图1-1 Joystick按键连线图


这次试验没有涉及到外部中止,都是做一般的IO输入运用的,所以在这儿外部中止就做学习总结了。下面给出这次试验的主程序:

#include”main.h”

volatile unsigned long SysTickCnt;

void SysTick_Handler (void)

{

SysTickCnt++;

}

void DelayMs (unsigned long tick)

{

unsigned long systickcnt;

systickcnt = SysTickCnt;

while ((SysTickCnt – systickcnt) < tick);

}

void PortInit(void)

{

GPIO1->FIODIR = 0xB0000000;

GPIO2->FIODIR = 0x0000007C;

LedAllOff();

}

int main(void)

{

unsigned char LedFlag = 1;//记载LED状况

SystemInit();

SysTick_Config(SystemFrequency/1000 – 1);

PortInit();

while(1)

{

if(!LedFlag)

{

Led1On();//点亮LED

}

else

{

Led1Off(); //平息LED

}

if(!KEY_VAL)

{

DelayMs(10);

while(!KEY_VAL);

LedFlag ^=1;// Led状况改动一次

}

if(!KEY_EN)//此处是为了测验摇杆按键的功用是否正常

{

DelayMs(10);

while(!KEY_EN);

Led8Neg();//点亮LED // Led状况改动一次

}

}

}


上一节对程序没有做过多的解说,这儿详细分析一下,工程中包含的源文件如下图所示:

工程中startup_LPC17XX.s是M3的发动文件,发动文件由汇编语言写的,它的效果一般是下面这几个:

1)堆和栈的初始化

2)向量表界说

3)地址重映射及中止向量表的搬运

4)设置体系时钟频率

5)中止寄存器的初始化

6)进入C应用程序

工程中main.c是我写的应用程序,也便是这次试验的程序,core_cm3.c与core_cm3.h首要是M3外围驱动源代码与头文件,运用时一般不需要修正,直接调用就能够。system_LPC17xx.c与system_LPC17xx.h是关于体系的文件,里边首要供给了体系初始化函数SystemInit(),文件中默许状况下界说的晶振的巨细为12M,运用的是外部晶振,还运用了PLL0倍频,关于倍频的问题,今后渐渐再总结。芯片LPC1768的初始化首要包含时钟装备,电源办理功耗办理等。相比较而言,时钟装备相对杂乱,因为它包含两个PLL倍频电路,一个是主PLL0首要是为体系和USB供给时钟,另一个是PLL1专门为USB供给48M时钟,但也能够不运用它们。因为时钟装备比较灵敏,所以相以设置这些参数也比较杂乱,可是这些在体系文件中已有清晰的界说,所以想要变化时只需修正体系文件中相应的宏或函数即可。

下面扼要总结一下main()函数,首先是体系初始化函数SystemInit(),上面说过它在system_LPC17xx.c这个源文件中,这个函数首要完成了对时钟的装备,体系功耗PCONP,时钟输出,flash加快等体系资源装备。假如要进行修正能够参阅源文件的修正办法,虽然是英文注释,但都十分简略,有爱好的能够翻开看看,不过一般状况下咱们拿来直接用就好了不必修正的。

函数SysTick_Config(SystemFrequency/1000 – 1)是用来装备体系时钟节拍的,它的原型在core_m3.c这个源文件中。试验程序顶用的延时函数都是硬件延时,其实便是体系节拍守时器所发生的。运用硬件延时的原因是1、不占用软件体系资源,2、比较准确。体系守时器装备很简略,运用也很便利,专为体系软件或体系办理软件供给距离中止。体系节拍守时器的时钟源能够是内核时钟也,能够是外部时钟,外部时钟P3.26脚引进,当然想从这个引脚输入时钟,需要将这个引脚先装备成STCLK功用。体系节拍守时器是一个24位守时器,当计数值到达0时发生中止。体系节拍守时器的功用便是为下一次中止供给前供给一个固守时刻距离。因为节拍守时器是24位的,所以运用时不能与其它守时器相提并论,必定要注意守时时长的约束,不能超过边界。

最终再说一下数据类型的问题,在8位机中数据位找一般便是8位的所以,界说变量时一般选用单字节处理速度会快些,但到了32位机中,数据位宽一般是32位的,所以界说变量时一般用4字节会好些。在core_cm3.c中有关于数据类型的界说,有爱好的能够翻开看看。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/yuanjian/263305.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部