【#文档大全网# 导语】以下是®文档大全网的小编为您整理的《210学习日记(13)_定时器和修改工具》,欢迎阅读!
210学习日记(13) --定时器和修改工具
一,定时器用于PWM输出(驱动蜂鸣器):
我本来从来不写蜂鸣器的程序的(声音太难听),但是今天破例了。
下面,先介绍下定时器的几个关键的寄存器吧:
问:大家都知道,定时器的实现,其实就是一个计数的过程(从0家到一个数字或从一个数字减到0),那么这个数字从哪里来呢? 答:从寄存器TCNTBx中获得,当我们编程时,写入一个数组到该寄存器,然后通过手动装载或自动装载,就会把该寄存器的值用于"一个数字"了。
问:PWM波形是高低电平交替出现的,那么定时器输出的电平什么时候翻转呢?
答:这个情况和TCMPBx寄存器中的值有关系,当计数器中的值("一个数字")减到(或加到)和TCMPBx寄存器中的值相等时,电平翻转。
本来想多说点的,但是实在是没什么可说的,直接上部分代码吧: { /* 设置时钟源 * Timer0 input clock Frequency = 66700000 / ( {prescaler + 1} ) / {divider value} * = 66700000 / (1+1) / 1 * = 33350000( 即1s计数33350000次 ) */ TCFG0 &= ~(0xff); TCFG0 |= 1; /* Prescaler = 1 */ TCFG1 &= ~0xf; /* 0000 = 1/1 */ /* 设置TCNTB0(即PWM的频率) */ TCNTB0 = 33350; /* PWM的频率为1KHz */ /* 设置TCMPB0(即PWM的占空比) */ TCMPB0 = 16675; /* 占空比为50% */ TCON &= ~(1<<2); /* 不进行电平反转(即引脚初始值为0) */ TCON |= (1<<3); /* auto-reload */ }
以上是定时器的初始化代码,关于定时器用于PWM输出的代码我以经共享在了"Tiny210学习日记_代码"目录下了,名为"14_pwm"。请大家自己阅读,十分简单。
测试方法:(在终端输入命令) pwm on (蜂鸣器响) pwm off (蜂鸣器不响)
二,倒计时自启动内核:
用官方的u-boot的时候,总是有倒计时启动内核,感觉特别的爽,因此,我得给自己写的bootloader加上该功能(方法比较粗糙)。
这部分代码没有任何难道,大家一看代码就能够明白,添加类容如下:
void autoboot(void) { int i; char bootdelay = BOOTDELAY; while(1) { wy_printf("Hit any key to stop autoboot: %d \n", bootdelay); if(bootdelay == 0) { wy_printf("loading linux from 0x400000 to 0x20008000...\n"); nand_read(0x20008000, 0x400000, 0x800000); wy_printf("boot linux ...\n"); return; } for(i=0;i<=8;i++) { delay(); if( tstc() ) /* 这个函数只是去读UART的状态而已 */ return; } bootdelay--; } return; }
该部分代码放在了"Tiny210学习日记_代码"目录下了,名为"bootloader_bootdelay"。
三,修改工具(wy_mktools.exe):
仔细阅读过学习日志的人,一定在阅读"Tiny210学习日记(6)"时会有疑问,前面的日志明明说最多只从Nand中能拷贝16K的代码到IRAM中,可是为什么在制作工具的时候,会有如下的宏呢:
#define IMG_SIZE (24*1024)
这个疑问很关键,我们不能够把这个宏定义为24K大小,如果定义为24K大小的话,当我们直接编译出的old.bin(未经过工具处理的bin文件)大于16K的时候,将无法重定位成功。
所以,我们在自制工具时,要把这个宏改为: #define IMG_SIZE (16*1024)
修改过的工具,位于"Tiny210学习日记_代码"目录下了,名为"newtools",以后如果大家直接编译出的bin文件大于16K的话,一定要用该工具。
另外,如果大家仔细仔细对比过最后生成的bin文件的话,会发现,如果我们直接编译出的old.bin(未经过工具处理的bin文件)大于24K的时候,然后经过工具(newtools.exe)处理后的bin文件任然只有24K,那么意味着有一部分代码被丢弃了,这样的bin文件肯定不能够运行或达到我们想要的效果,那么该怎么办呢?
我们可以用如下命令,将两部分代码组装起来,从而达到目的: cat ./old.bin ./new.bin > ./total.bin
注意:
如果觉得又是编译,又是用工具处理,又是用cat命令,很是麻烦的话,大家可以写一个shell程序!! 注:
本文来源:https://www.wddqxz.cn/55dc0c550229bd64783e0912a216147916117e54.html