精品课件-uCOOS-II原理与ARM应用程序-第8章
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第八章 博创UP-CUP2410移植与实例
(4) 直流电机,位于七段数码管旁边,由TOUT0和TOUT1协 作控制,当其中之一为高电平,另一端为低电平时,直流电机 转动,转动方向与转速由两个PWM波的相位与占空比控制。
UP-CUP2410实验箱上的核心芯片为S3C2410A,与UP-Star 实验板上的ARM芯片型号相同,因此,在UP-CUP2410实验箱上 移植µC/OS-Ⅱ与UP-Star实验板上的移植工作基本相似。
第八章 博创UP-CUP2410移植与实例
8.2 UP-CUP2410工程实例
在第六章工程ex6_1的基础上新建工程ex8_1,保存目录为 D:\ZYUCOSII\ex8_1,此时的工程ex8_1和工程ex6_1完全相同, 只是工程文件名更改为ex8_1。需要修改的文件有startup.s、 bsp.c、bsp.h、appfun.c、app.h、app_cfg.h以及ex8_1.mac。 其中,startup.s和ex8_1.mac文件的修改是因为UP-CPU2410实 验箱上集成了64 MB的SDRAM(2片HY57V561620芯片),而UPStar实验板上仅有32 MB的SDRAM。
16 void LEDon(INT8U u);
//1-LED1,2-LED2,3-LED3, 4 et-LED1,2,3
17 void LEDoff(void);
//LED 1,2,3 Off
18 void LED_Flash(INT8U u); //LED Flash
19 //---------------------------------------------------------
(1) startup.s文件的第41行和第51行改为 BWSCON_Val EQU 0x22111110 BANKSIZE_Val EQU 0x000000B1
第八章 博创UP-CUP2410移植与实例
(2) ex8_1.mac文件的第15行和第25行改为 _writeMemory32(0x22111110, 0x48000000, " Memory "); /* BWSCON */ _writeMemory32(0x000000b1, 0x48000028, " Memory "); /* BANKSIZE */ (3) bsp.h文件中添加对GPB口寄存器以及定时器0和1的 寄存器地址的宏定义,如下: 1 //Port B Control 2 //Port B Data 3 //Pull-up Control B
第八章 博创UP-CUP2410移植与实例
工程ex8_1如图8-1所示。图8-1给出的是一个调试界面, 从图上可以看出工程ex8_1有10个任务。
第八章 博创UP-CUP2410移植与实例
图8-1 工程ex8_1
第八章 博创UP-CUP2410移植与实例
打开串口调试助手,仿真调试工程ex8_1,将有以下现象: (1) LED灯1每隔1秒闪烁一次。 (2) LED灯2每隔2秒闪烁一次。 (3) 当按下INTKEY按键时,LED灯3闪烁,并且串口调试助 手显示按键信息。 (4) 串口调试助手每隔3秒显示CPU使用情况信息。 (5) 两个七段数码管为秒计时器,从00秒计数到99,并一 直循环下去。
第八章 博创UP-CUP2410移植与实例
第八章 博创UP-CUP2410移植与实例
8.1 准备工作 8.2 UP-CUP2410工程实例 8.3 本章小结
第八章 博创UP-CUP2410移植与实例
8.1 准 备 工 作
打开UP-CUP2410实验箱,连接上电源以及J-LINK仿真器, 串口0通过串口线与计算机串口连通,打开UP-CUP2410电源开 关,此时,UP-CUP2410实验箱上点阵LED屏会滚动显示 “UPTECH”字样。
25
26
break;
27
default:
28
break;
第八章 博创UP-CUP2410移植与实例
29
}
30
break;
31
default:
32
break;
33
}
34 }
上述代码第8~18行为EINT5中断响应入口。
第八章 博创UP-CUP2410移植与实例
(6) app.h文件的完整代码如下: 1 /*File Name: app.h 2 **By zhnyong@ 3 **@2009-4-4 4 **Copyright Reserved 5 */ 6 7 #ifdef MY_APP_GLOBALS 8 #define MY_APP 9 #else 10 #define MY_APP extern 11 #endif
第八章 博创UP-CUP2410移植与实例
12
13 //---------------------------------------------------------
14 //LED Related Function Prototype
15 //---------------------------------------------------------
20 //
IRQ Interrupter Related
21 //---------------------------------------------------------
22 void OpenTimer4Intr(void); //Open Timer4 Interrupter,but close all others
第八章 博创UP-CUP2410移植与实例
(3) 两个七段数码管,均由CPLD扩展控制,它们的地址为 0x0800 0110和0x0800 0112(参考《ARM原理与C程序设计》第 47页),这些地址称为位码;可在数码管上显示0~9十个数字 和A~F六个英文字母,对应的数据为0xC0、0xF9、0xA4、0xB0、 0x99、0x92、0x82、0xF8、0x80、0x90、0x88、0x83、0xC6、 0xA1、0x86和0x8E,这些称为段码。因此,把段码赋给位码, 则对应位置的数码管将显示相应的数字或字母。
第八章 博创UP-CUP2410移植与实例
UP-CUP2410实验箱的原理图在《ARM原理与C程序设计》一 书第二章作了介绍,这里不再给出原理图。本章程序要使用的 硬件部分如下:
(1) INTKEY,即UP-CUP2410实验箱右下角的按键,位于 点阵数码管的下面,该按键的一端与地相连,另一端与EINT5 相连。INTKEY为常开按键,开着时EINT5为高电平;按下后 EINT5为低电平;松手后按键自动弹开,EINT5回到高电平。因 此,INTKEY是一个外部中断输入按键。
第八章 博创UP-CUP2410移植与实例
4 #define GPBCON
(*(volatile unsigned int*)0x56000010)
5 #define GPBDAT
(*(volatile unsigned int*)0x56000014)
6 #define GPBUP
(*(volatile unsigned int*)0x56000018)
7
8 //Timer Count Buffer 0
9 //Timer Compare Buffer 0
10 //Timer Count Observation 0
11 #define
TCNTB0
(*(volatile unsigned int*)0x5100000C)
12 #define
TCMPB0
23 void OpenEIntr(void);
//Open EINT 3,5,9,11,12
第八章 博创UP-CUP2410移植与实例
24 //---------------------------------------------------------
16
SRCPND =SRCPND;
17
INTPND=INTPND;
18
break;
19
case 14:
//Timer4 Interrupt:14
20
OSTimeTick();
//OS Clock Tick
21
22
SUSSRCPND=SUSSRCPND;
23
SRCPND =SRCPND;
24
INTPND=INTPND;
第八章 博创UP-CUP2410移植与实例
8.2.1 工程ex8_1 工程ex8_1中包含10个任务,除µC/OS-Ⅱ系统创建的空闲
任务、统计任务和定时器任务外,工程ex8_1创建了7个任务。 其中,任务AppTaskStart用于创建其他的6个任务;任务 AppTask_1使LED灯1每隔1秒闪烁一下;任务AppTask_2使LED灯 2每隔2秒闪烁一下;任务AppTask_3请求信号量Led_Sem,当按 下INTKEY按键时,将使LED灯3闪烁;任务AppTask_4用于创建 定时器SegTmr,该定时器每秒定时一次;任务AppTask_5请求 定时器发出的信号量Time Sem,使两个七段数码管呈秒表计时 显示;任务AppTask_6用于控制直流电机的转速和转动方向。
(*(volatile unsigned int*)0x51000010)
13 #define
TCNTO0
(*(volatile unsigned int*)0x51000014)
第八章 博创UP-CUP2410移植与实例
14
15 //Timer Count Buffer 1
16 //Timer Compare Buffer 1
内容:
1 void OS_CPU_ExceptHndlr(INT32U except_type)
2{
3
switch(except_type)
4
{
第八章 博创UP-CUP2410移植与实例
5
case 6:
//IRQ Interrupt
6
switch(INTOFFSET)
//INTOFFSET is sub-int entry No.
17 //Timer Count Observation 1
18 #define
TCNTB1
(*(volatile unsigned int*)0x51000018)
19 #define
TCMPB1
(*(volatile unsigned int*)0x5100001
7
{
8
case 4:
//EINT5
9
if((EINTPEND & (1<<5))==(1<<5))
10
{
11
eint_src=5;
12
OSSemPost(LedSem);
13
}
14
EINTPEND=EINTPEND;
15
SUSSRCPND=SUSSRCPND;
第八章 博创UP-CUP2410移植与实例
(*(volatile unsigned int*)0x51000020)
第八章 博创UP-CUP2410移植与实例
(4) app_cfg.h文件的第7行改为
#define OS_TASK_TMR_PRIO
20
即定时器任务的优先级调整为20。
(5) bsp.c文件中的OS_CPU_ExceptHndlr函数修改为如下
第八章 博创UP-CUP2410移植与实例
(2) 三个LED灯,LED1、LED2和LED3依次与S3C2410A芯片 的GPC5、GPC6和GPC7相连,这一点与UP-Star实验板相同。当 GPC5为低电平时,LED1点亮;当GPC5为高电平时,LED1熄灭。 当GPC6为低电平时,LED2点亮;当GPC6为高电平时,LED2熄灭。 当GPC7为低电平时,LED3点亮;当GPC7为高电平时,LED3熄灭。
8.2.2 工程ex8_1代码与注解 相对于工程ex6_1,工程ex8_1中代码需修改的文件有
startup.s、bsp.c、bsp.h、appfun.c、app.h、app_cfg.h以 及ex8_1.mac。其中,除了文件appfun.c和app.h外,其余文件 的修改工作量较小,这些修改罗列如下:
第八章 博创UP-CUP2410移植与实例
(6) 每隔约392秒直流电机会改变转动方向一次(第一次改 变转动方向间隔时间为196秒);每个392秒的时间内,电机从 低速慢慢调至最高速,再慢慢降为低速,然后改变转动方向, 循环往复。
第8.2.2节将讨论工程ex8_1的代码。
第八章 博创UP-CUP2410移植与实例