本次新建工程用于不同功能的测试,我们主要是要对板载的外设进行功能验证:
一、新建一个工程
新建工程:
填写工程名:
工程配置:
在打开的对话框中,将Chip type设置为MAX78000,board type 设置为FTHR_RevA,以及CMSIS-DAP的适配器类型(直接选择)。
注意:新建好的例程是基于BOARD ?= EvKit_V1板子的,虽然咱们选择了FTHR_RevA,编译时还是要在Makefile文件里面改一下,两个板子的硬件是有差异的。
打开后纵观看了一眼,居然没有看到初始化程序,不过并不会影响我们的的编译调试;通过层层的查找还是没有看到初始化最终在哪里调用了,由于除了基础功能包外已经重新封装了一层,我们就不纠结了,尽情的进行应用设计吧。
本工程是基于“Hello_World”进行的编译的,里面的主要功能是LED和串口(printf)的测试,可以看到通过修改延时程序和LED观察变化,同时通过打印信息如下:
二、按键功能测试
SW1用户可编程功能按钮通过消码器IC连接到MAX78000 0.2端口。
SW2用户可编程功能按钮通过消码器IC连接到MAX78000 1.7端口。
板载的用户按键有2个,我们测试使用一下,并结合到上述的新建工程那种。
原理图如下:
上图可以看出按键按下是下降沿触发,不过在进行中断模式检测按键的时候出现了一个大问题,先看一下调了半天的代码:
/***** Definitions *****/
#define SW1 0
#define SW2 1
/***** Globals *****/
int key_cnt = 0;
int key_cnt_old = 0xff;
/***** Functions *****/
void SW1_Callback()
{
key_cnt++;
printf("key1!\n");
// PB_RegisterCallback(SW1, NULL);
}
void SW2_Callback()
{
key_cnt--;
printf("key2!\n");
// PB_RegisterCallback(SW2, NULL);
}
// *****************************************************************************
int main(void)
{
PB_RegisterCallback(SW1, SW1_Callback);
PB_IntEnable(SW1);
PB_RegisterCallback(SW2, SW2_Callback);
PB_IntEnable(SW2);
printf("Hello World!\n");
while (1) {
if(key_cnt != key_cnt_old) {
LED_Off(LED_RED);
LED_Off(LED_GREEN);
LED_Off(LED_BLUE);
switch(key_cnt%3) {
case 0:
LED_On(LED_RED);
printf("LED_RED %d\n", key_cnt);
break;
case 1:
LED_On(LED_GREEN);
printf("LED_GREEN %d\n", key_cnt);
break;
case 2:
LED_On(LED_BLUE);
printf("LED_BLUE %d\n", key_cnt);
break;
default:
break;
}
key_cnt_old = key_cnt;
}
}
}
进行按键的基础功能测试准备是通过按键SW1控制LED的变换(红-绿-蓝),SW2反向循环,为此创建了一个全局变量key_cnt,出现了一个非常奇葩的现象,就是外部中断可以正常进入(通过断点可以发现进入并修改了变量),但是主while里面对key_cnt的判断确实一直为0,导致无法进入操作,为此尝试了很多,最终是通过在while里面加了一个MXC_Delay(1)正常了,只是加了一个1微妙的延时,虽然解决了,可是还是不能理解。
串口接收如下(正常后):
精彩视频分享:
串口接收情况(GPIO和外部中断测试)
GPIO和外部中断测试效果展示