• 1
    回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

【得捷之选】基础功能测试——GPIO和外部中断

      本次新建工程用于不同功能的测试,我们主要是要对板载的外设进行功能验证:
一、新建一个工程
新建工程:

填写工程名:

工程配置:
      在打开的对话框中,将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和外部中断测试效果展示

 

全部回复(1)
正序查看
倒序查看
04-30 15:15

本帖的MAX78000FTHR, 得捷官网购买连接如下:

https://www.digikey.cn/zh/products/detail/analog-devices-inc-maxim-integrated/MAX78000FTHR/13549063?WT.z_header=search_go&s=N4IgTCBcDaILIEEAaB2AHABiwMQCoAkAlEAXQF8g

关于购买有任何问题,大家可以随时联系我哦(微信:18522870362)

0
回复