嵌入式系统概论实验指导书冯德旺Word格式.docx
- 文档编号:359209
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:17
- 大小:27.50KB
嵌入式系统概论实验指导书冯德旺Word格式.docx
《嵌入式系统概论实验指导书冯德旺Word格式.docx》由会员分享,可在线阅读,更多相关《嵌入式系统概论实验指导书冯德旺Word格式.docx(17页珍藏版)》请在冰点文库上搜索。
实验电路连线:
用USB连接线将SD-FSL-KL25-EVB开发板接入PC机。
实验参考程序:
.include"
include.s"
declaration:
#start参数定义区域
.section.data@读写,即定义变量
runpin:
.word100
.section.rodata@只读,即定义常数
RUN_COUNTER_MAX:
.word0x0016e360
.section.data@定义可读写的字符串
string:
.asciz"
123456789"
#end参数定义区域
#start主函数定义开始
.section.text.main
.globalmain@定义全局变量,使其在芯片初始化之后可以调用
.align2
.typemainfunction@定义主函数类
.align2
#end主函数定义结束
main:
cpsidi@关闭总中断
#小灯相应引脚的gpio初始化(设置引脚的各参数)r0-r3保存需要传递的参数
movr0,#light_port@r0存储PORT端口号
#ldrr5,=runpin
#movr6,#18
#strr6,[r5]
#ldrr1,[r5]@将引脚号18存入r1
movr1,#light_G_pin@r1存储引脚号
movr2,#light_dirout@r2指明引脚的输出方向
movr3,#light_L@r3指明引脚的初始状态
bllight_init@调用小灯初始化函数
cpsiei@开总中断
#主循环,通过RUN_COUNTER_MAX递减来延迟,设定小灯的闪烁间隔
repeat:
ldrr4,=RUN_COUNTER_MAX@取延时计数值到r4
ldrr4,[r4]
loop:
subr4,#1
cmpr4,#1
bneloop
bllight_change@调用小灯亮暗转变函数
blrepeat
.align4
.end
实验目的:
1)熟悉ARMCortex-M0+寄存器配置方法;
2)学习KL25的GPIO编程方法;
3)通过三色灯观察程序运行情况;
实验要求:
编写程序,以KL25B口的9、18和19引脚作为输出口,控制三色灯灯(可发红,绿,蓝光)交替闪亮。
1)根据开发板原理图,确认三色灯为共阳接法,因此B口相关引脚输出低电平时点亮、高电平熄灭;
2)通过延时实现三色灯交替闪亮,观察延时常数的影响,理解控制颜色方法。
1)通过USB线连接PC机和SD-FSL-KL25-EVB开发板;
2)在PC机上编程,并编译形成可在开发板上执行的ELF程序;
3)将ELF程序烧入开发板的Flash中,并重新上电观察程序运行现象。
#include"
includes.h"
//包含总头文件
intmain(void)
{
uint_32run_counter;
//主循环计数变量
uint_8flag;
//三色灯变换标志
//三色灯初始化
light_init(LIGHT_PORT,LIGHT_PIN_RED,LIGHT_OFF);
light_init(LIGHT_PORT,LIGHT_PIN_GREEN,LIGHT_OFF);
light_init(LIGHT_PORT,LIGHT_PIN_BLUE,LIGHT_OFF);
//给全局变量赋初值
g_n1=0;
//给主函数相关变量赋初值
flag=1;
run_counter=0;
//三色灯变换标志
//进入主循环,使红、绿、兰三灯闪烁
//主循环开始==========================================================
for(;
;
)
{
run_counter++;
//主循环计数+1
if(run_counter>
RUN_COUNTER_MAX)
{
run_counter=0;
switch(flag)
{
case1:
//红灯取反、绿灯暗、兰灯暗
light_change(LIGHT_PORT,LIGHT_PIN_RED);
light_control(LIGHT_PORT,LIGHT_PIN_GREEN,LIGHT_OFF);
light_control(LIGHT_PORT,LIGHT_PIN_BLUE,LIGHT_OFF);
flag=2;
break;
case2:
//绿灯取反、红灯暗、兰灯暗
light_change(LIGHT_PORT,LIGHT_PIN_GREEN);
light_control(LIGHT_PORT,LIGHT_PIN_RED,LIGHT_OFF);
flag=3;
case3:
//兰灯取反、红灯暗、绿灯暗
light_change(LIGHT_PORT,LIGHT_PIN_BLUE);
light_control(LIGHT_PORT,LIGHT_PIN_RED,LIGHT_OFF);
light_control(LIGHT_PORT,LIGHT_PIN_GREEN,LIGHT_OFF);
flag=1;
default:
}//end_switch
}//end_if
}//end_for
//主循环结束==========================================================
return0;
}
1)了解UART模块相关寄存器及配置方法;
2)理解串行通信的工作原理;
3)掌握UART的各种模式的编程方法;
4)理解用UART调试KL25程序的方法。
采用中断方式编写UART接收和发送程序,上电和复位时给PC机发送串口连接信息,并用串口调试工具观察PC机和开发板间的通信情况。
按照KL25技术手册配置UART相关寄存器,完成UART初始化,然后通过串口调试工具观察通信情况。
1)安装TTL转USB驱动程序;
2)用USB线将SD-FSL-KL25-EVB开发板连接到PC机;
3)编写UART通信程序,完成编译形成ELF程序;
4)将ELF程序由PC机烧入开发板的Flash中,并进行调试。
用USB线将开发板连接到PC机,并用USB转串线将UART0或UART1口连接到PC机以实现串行通信。
//1.声明主函数使用的局部变量
//主循环次数计数器
//2.关总中断
enter_critical();
//进入临界区
//3.初始化模块
light_init(LIGHT_PORT,LIGHT_PIN_BLUE,LIGHT_ON);
//蓝灯初始化
uart_init(UART_0,MCGIRCLK,9600);
//串口0时钟MCGIRCLK(4000Khz)
uart_init(UART_1,BUSCLK,9600);
//串口1、2使用总线时钟24000Khz
uart_init(UART_2,BUSCLK,9600);
uart_send_string(UART_0,"
HelloUart_0!
\r\n"
);
//串口发送初始化提示
uart_send_string(UART_1,"
HelloUart_1!
uart_send_string(UART_2,"
HelloUart_2!
//4.全局变量及主函数局部变量赋初值
//运行计数器
//5.使能模块中断及总中断
uart_enable_re_int(UART_0);
//使能串口0接收中断
uart_enable_re_int(UART_1);
//使能串口1接收中断
uart_enable_re_int(UART_2);
//使能串口2接收中断
init_critical();
//开总中断
//进入主循环
run_counter++;
//主循环次数计数器+1
//主循环次数计数器清0
light_change(LIGHT_PORT,LIGHT_PIN_BLUE);
//蓝灯变化
}//end_if
}//end_while
1)了解定时器/计数器工作原理;
2)熟悉KL25定时器模块相关寄存器及配置方法;
3)掌握KL25定时器编程方法;
4)通过串口调试工具观察时、分、秒变化情况。
编写程序,将RTC时钟信息通过串口发送到PC端,用串口调试工具观察时钟变化情况,同时观察小灯闪烁情况。
按照KL25技术手册配置RTC模块相关寄存器,完成RTC初始化,然后通过串口调试工具和小灯观察时钟变化的影响。
3)编写RTC时钟程序,完成编译形成ELF程序;
用USB线将开发板连接到PC机,并用USB转串线将UART1口连接到PC机以观察时钟信息。
voidMCGIRCLK_OutEnable(uint_8clock);
//启用内部快速时钟
uint_32AlarmTimes;
//报警计时器定时间隔
uint_32SecendTimes;
//定时器秒计数器的起始值
uint_32remember;
//进入临界区,关中断
//3.初始化底层模块
uart_init(UART_1,MCGIRCLK,9600);
//串口0初始化,总线时钟24000Khz,波特率9600
SecendTimes=0x01;
AlarmTimes=0x02;
MCGIRCLK_OutEnable(CLKOUT_MCGIRCLK);
//开启内部慢速时钟
rtc_init(SecendTimes,AlarmTimes);
//RTC初始化
//4.变量赋初值
g_time[0]=0;
//
(1)"
时分秒"
缓存初始化(00:
00:
00)
g_time[1]=0;
g_time[2]=0;
remember=g_time[2];
//
(2)临时变量remember初始化
//5.开中断
//启动串口1接收中断
HelloRTC!
if(g_time[2]!
=remember)//判断秒钟是否发生变化
{
light_change(LIGHT_PORT,LIGHT_PIN_BLUE);
uart_sendN(UART_1,3,g_time);
remember=g_time[2];
}
//主循环结束===========================================================
//启用MCGIRCLK时钟,输出时钟频率在31.25Khz-4Mhz
voidMCGIRCLK_OutEnable(uint_8clock)
PORTC_PCR3=PORT_PCR_MUX(0x5);
SIM_SOPT2=SIM_SOPT2_CLKOUTSEL(clock);
//复用PTC3为CLKOUT,输出时钟波形
MCG_C1|=MCG_C1_IRCLKEN_MASK|MCG_C1_IREFSTEN_MASK;
MCG_C2&
=~MCG_C2_IRCS_MASK;
}
1)了解Flash工作原理;
2)熟悉KL25Flash模块相关寄存器及配置方法;
3)掌握KL25Flash编程方法;
4)通过串口调试工具观察Flash擦写情况。
编写程序,将Flash信息通过串口发送到PC端,用串口调试工具观察Flash中的内容。
按照KL25技术手册配置Flash模块相关寄存器,完成Flash初始化,然后通过串口调试工具观察Flash的擦写情况。
3)编写Flash程序,完成编译形成ELF程序;
用USB线将开发板连接到PC机,并用USB转串线将UART1口连接到PC机以观察Flash擦写情况。
//1.申明主函数使用的局部变量
//运行计数器
uint_8h=1;
//2.关总中断
uart_init(UART_TEST,bus_clk_khz,9600);
//串口1初始化,总线时钟24000Khz,波特率9600
flash_init();
//Flash初始化
uart_enable_re_int(UART_TEST);
uart_send_string(UART_TEST,"
UartInitial\r\n"
SD-FSLLibraryFlashTest!
\r\n\r\n"
Press?
togethelp\r\n"
//主循环
}//end_if
switch(ch)
case'
?
'
:
//命令帮助
擦除,读取,写入格式如下:
擦除E\r\n"
读取R\r\n"
写入W\r\n"
ch=1;
break;
e'
//擦除操作
E'
h=1;
h=flash_erase_sector(10);
if(h==0)uart_send_string(UART_TEST,"
EraseSuccess!
ch='
1'
w'
//写入操作
W'
h=flash_write(10,0,4,"
1234"
WriteSuccess!
r'
//读取操作
R'
uart_sendN(UART_TEST,4,(uint_8*)(10*1024));
uart_send_string(UART_TEST,"
default:
}
}//end_for
//==============主循环(结束)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 概论 实验 指导书 冯德旺
![提示](https://static.bingdoc.com/images/bang_tan.gif)