在线时间151 小时
UID3129923
注册时间2015-5-21
NXP金币0
该用户从未签到
高级会员

- 积分
- 722
- 最后登录
- 2016-1-9
|
由于上周考试,所以过了近一周才发这第二篇分享。
本次实验是通过K3和K4按键,控制两个LED,在官方例子中按键控制采用了查询管脚电平的方法。
我在本次实验中K3采用查询法控制LED,而K4采用IRQ中断的查询方式控制LED。
实验用的软件是KEIL5-MDK,光盘里面的教程很详细。
下面是原程序:
#include "includes.h"
void myDelay (INT32U ulTime)
{
INT32U i;
i = 0;
while (ulTime--) {
for (i = 0; i < 5000; i++);
}
}
int main (void)
{
SystemCoreClockUpdate();
SIM_SCGC5 |= (SIM_SCGC5_PORTA_MASK
| SIM_SCGC5_PORTB_MASK
| SIM_SCGC5_PORTC_MASK
| SIM_SCGC5_PORTD_MASK
| SIM_SCGC5_PORTE_MASK );
PORT_ENABLE_CLK(MKL_PORTA);
PORT_ENABLE_CLK(MKL_PORTB);
PORT_ENABLE_CLK(MKL_PORTD);
IO_FUN_SEL(MKL_PORTB,18,1);
IO_FUN_SEL(MKL_PORTB,19,1);
IO_FUN_SEL(MKL_PORTD,1,1);
IO_FUN_SEL(MKL_PORTA,4,1);
IO_IRQ_CONFIG(MKL_PORTA,4,2);
IO_FUN_SEL(MKL_PORTD,6,1);
GPIO_DDR_OUTPUT(MKL_PORTB,18);
GPIO_DDR_OUTPUT(MKL_PORTB,19);
GPIO_DDR_OUTPUT(MKL_PORTD,1);
GPIO_SET(MKL_PORTB,18);
GPIO_SET(MKL_PORTB,19);
GPIO_SET(MKL_PORTD,1);
while(1){
if(!GPIO_GET_VALUE(MKL_PORTD,6))
{
GPIO_TOGGLE(MKL_PORTB,19);
myDelay(200);
}
if(PORTA_ISFR << 4)
{
PORTA_ISFR = (1 << 4);
GPIO_TOGGLE(MKL_PORTB,18);
}
GPIO_TOGGLE(MKL_PORTD,1);
myDelay(200);
}
}
下面是视频:
https://v.youku.com/v_show/id_XMTI4MzEwODIxNg==.html
在本次实验中遇到了一些问题:
在使用IRQ中断时,DMA触发与正常触发有什么区别?;为什么用正常的下降沿触发时,程序不会有上面的结果,设置为DMA时就可以?
请大家帮忙解答一下这两个问题,谢谢了!
|
评分
-
查看全部评分
|