历史上的今天
今天是:2025年03月06日(星期四)
2020年03月06日 | 【ARM裸板】定时器中断示例与分析
2020-03-06 来源:eefocus
1.定时器结构分析
1.每来一个CLK,TCNTn减1
2.当TCNTn == TCMPn时,(可以把对应的PWM引脚翻转)
TCNTn与TCMPn的值来自寄存器TCNPBn与TCMTBn
3.TCNTn继续减1,当TCNTn == 0时,可以产生中断(PWM引脚再次翻转)
4.TCNTn == 0时,可自动加载初值

2.初始化
1.设置时钟源
2.设置初值
3.加载初值,启动Timer
4.设置为自动加载
5.中断相关

需要设置:1.Prescaler,2.MUX(Divider),3.TCMPB0(不是PWM测试,因此该不需要设置),4.TCNTB0,5.TCON0

2.1 设置时钟源

由上公式:
设置Prescaler
设置MUX
/* 1.设置timer0的时钟
* Timer CLK = PCLK / {prescaler value+1} / {divider value}
* 50000000/(99+1)/(16) = 31250
*/
TCFG0 = 99; //Prescaler = 99,用于timer0,timer1
TCFG1 &= ~0xFF;
TCFG1 |= 3; //MUX0=1/16(即是 divider value)
2.2 设置初值
//2.设置timer0的初值
TCNTB0 = 15625; //0.5s中断一次(15625/31250=0.5s)

2.3 手动加载初值
手动加载初值至TCNT0与TCMT0,启动timer0
置1
TCON |= (1<<1);//Update from (TCNTB0 & TCMPB0) to (TCNT0 & TCMT0)

2.4 清除手动加载
清零
TCON &= ~(1<<1);
2.5 设置自动重装载并启动
TCON |= (1<<0) | (1<<3);//bit0:start, bit3:auto reload

3. 构造函数指针
把每一个中断的处理函数放置在指针数组中,当发生中断时,通过判断中断号,调用对应的函数即可
3.1 定义
定义函数指针,指针的变量名为irq_func
typedef void (*irq_func)(int);
irq_func irq_array[32];//定义存放函数指针数组(即:数组中存放的是函数指针)
typedef void(*Func)(void)的用途,先来看下其基本用法
typedef void (*func)(void);
void myfunc(void);
func pfun = myfunc;/*赋值*/
pfun();/*调用*/
3.2 由来
typedef void(*Func)(void);的由来
其实这样的形式声明函数指针是有"问题"的。如果仿照变量类型声明,声明函数指针似乎应该这样:
typedef void(*)() variable;
但是c标准的创建者没有这样做,不知道为什么,而选择了这样的声明:
typedef void(*variable)();
C编译器非常清楚,这就是在声明一个void(*)() 类型的函数指针variable。
3.4 注册函数
/* 注册中断
* param:1.中断号,2.中断服务函数
*/
void register_irq(int irq,irq_func fp)
{
irq_array[irq] = fp;//将fp指向的函数地址 存放在arr中
INTMSK &= (1< eg: register_irq(10, timer0_irq); 1 3.5 调用函数 /* 中断处理函数 * */ void handle_irq_c(void) { /* 1.分辨中断源 */ int bit = INTOFFSET;//判断谁在请求中断 /* 2.调用对应的处理函数 */ irq_array[bit](bit); //irq_array存放的是函数指针,加一个()即表示调用该函数 /* 3.清中断 :从源头开始清 */ SRCPND = (1<
史海拾趣
|
TO-220封装的可控硅,比如:BTA12,很普遍的可控硅,A1,A2两个引脚间的中心距离是2.4—2.7mm,边缘的距离大约是1.8mm,焊到PCB上后,两个焊盘的边缘的距离就更小了,可能只有1mm.当可控硅不导通的时候,两个引脚之间的电压差应该是220V,看到很多讲电气间隙和 ...… 查看全部问答> |
|
呵呵,小弟我作毕业设计遇到难题了,附件是原理图,用protues打开就可以了, 我程序部分很很有点问题。 各位大侠就帮帮忙啊 这个4*4键盘扫描程序在下面,这个搞好了,我的毕业设计论文基本就搞好了,等待 :\'( SAOMIAO: ...… 查看全部问答> |
|
采样控制理论中有一个重要结论:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同.PWM控制技术就是以该结论为理论基础,对半导体开关器件的导通和关断进行控制,使输出端得到一系列幅值相等而宽度不相等的脉冲,用这些脉冲来代替正弦 ...… 查看全部问答> |
|
小弟今天完全安装了 eVC++ 4.0 ,建立了一个基于对话框的MFC工程,Build 时居然出错: ----------Configuration: SetTime - Win32 (WCE ARMV4) Debug------- Compiling resources... Error executing rc.exe. SetTime.exe - 1 error(s), 0 warn ...… 查看全部问答> |
|
车载设备要求体积小并且要进行图像处理,不想用工控机。摄像头距离驾驶室较远,直线距离五米以上,线长估计要7~8米,计划采用IP摄像头,有没有做过这种项目的朋友?… 查看全部问答> |




