发 帖  
原厂入驻New
【大联大品佳 Nuvoton ISD9160语音识别试用体验】开发环境搭建 +下载工具使用IO +PWM +定时器综合应用
2020-9-6 14:14:03  149
分享
本次评测内容主要分享ISD9160的通用IO使用,最后LED灯把实验结果呈现给大家.
ISD9160 IO介绍:
   ISD9160有高达24个通用IO,每个GPIO端口分别由9个寄存器进行控制.24个IO分别分布在端口A和端口B.其中端口占16个IO,端口B占8个IO.
主要特性:
   每个IO可配置为输入,输出,开漏,准双向口.
   双向口模式每个IO都有一个弱上拉电阻(110K----300K)
   每个IO口都可以产生中断事件
   模拟输入  
   高度灵活的复用功能使得每个IO口可以作为通用IO或者外设使用。
   每个IO口还有相对应的保护位,在使能的情况下只允许读,不允许写,防止误操作。下面是各种端口基本操作。
无标题.png
   了解了IO的结构,以及寄存器以后,对IO的操作就是对寄存器的操作。
ISD9160 编译环境建立。
      因为ISD9160是cortex-M0内核的CPU,所以使用IAR或者KeilMDK开发都是可行的。下面的讲解将以MDK作为平台讲解。
     打开keilMDK,因为我们之前没有使用过ISD9160 这个器件,所以我们需要进行MDK的ISD9160 的PACK包安装。

  第一步,点击下图红色方框的pack installed 按钮。
无标题.png

在弹出的如下界面中,如图找到9160的器件,然后点击 Install 按钮就可以。当然也可以进MDK官方网站下载完了以后再进行导入。(点击下图元件右侧的蓝色文字就可以跳转到官方下载页面)
无标题.png
无标题.png
官方下载页面,直接点击Download就可以下载,可以使用专门的下载软件进行下载,大文件下载会比直接在MDK编译平台那里的速度快。

       安装完毕后,点击下图圆圈的魔术棒能找到9160的元件就说明安装成功了
无标题.png

创建工程:
比较简单,如果玩过M内核mcu的就会发现区别不大,说明9160是很容易上手的。1.添加CMSIS标准的文件以及相关的头文件,9160的SDK包里面都可以找到。2.添加外设库和系统文件3.添加用户自己的文件。完成后的工程如下:
无标题.png
硬件电路

GPIOA12控制着LED灯D2,J2在DEMO板上是短路的,根据此电路可知,只要使得GPIOA12端口输出低电平,此LED将会点亮,反之就熄灭
无标题.png
主要代码分析
SYS_Init();//  
   进行系统的时钟相关的初始化,主要是时钟源的选择,使能等。初始化完后调用SystemCoreclockUpdate();函数把内核时钟更新。主要是把SystemCoreClock这个变量更新,因为之后的波特率,时钟的计算都需要用到这个变量。
    初始化完后,就可以进行外设的操作了。  
GPIO_SetMode(PA, BIT12, GPIO_MODE_OUTPUT);//  设置外设的模式
void GPIO_SetMode(GPIO_T *gpio, uint32_tu32PinMask, uint32_t u32Mode)
{
   uint32_t i;
   for (i=0; i<GPIO_PIN_MAX; i++) {
       IF (u32PinMask & (1 << i)) {
           gpio->MODE = (gpio->MODE & ~(0x3 << (i << 1))) |(u32Mode << (i << 1));
       }
    }
}
    GPIO_SET_OUT_DATA(PA,~0x1000);// 因为是在A端口的12位,所以只要设置对应的寄存器的第十二个位,就会控制LED灯的输出电平。
编译下载
    程序编写完后就开始编译与下载。在编译之前,在工程的option for targets选项中的User项目做写入如下的命令语句,编译之后直接生成bin文件,以便烧录。
    无标题.png

编译完成后,打开ICP下载工具,把Nulink工具通过USB接到电脑端,另外一端接到板子上,然后点击连接,成功就会如下所示,显示芯片的型号。
1.png

然后点击APROM按钮选择生成的二进制文件,接着进行配置位的设定,主要是设定启动的地址,如下
1.png


最后把软件界面拉到最底下,选择编程区域,这里只选择APROM,如下
无标题.png
下载完后,LED灯就会欢快的跑起来了.
呼吸灯制作
下面继续深入,利用ISD9160的PWM与定时器外设,把LED改造成一个呼吸灯。就是指灯光设备的亮度随着时间由暗到亮逐渐增强,再由亮到暗逐渐衰减,很有节奏感地一起一伏,就像是在呼吸一样,因而被广泛应用于手机、电脑等电子设备的指示灯中。有了前面的LED控制,这个就方便了。首先要把LED的输出口的模式改变,变为PWM0外设输出通道。然后按照如下步骤配置就可以了。   
1.  首先进行定时器的初始化设置,如下
void BSP_BaseTimeInit(void)
{
         CLK_EnableModuleClock(TMR0_MODULE);    //  打开时钟定时器时钟
         CLK_SetModuleClock(TMR0_MODULE,CLK_CLKSEL1_TMR0SEL_HCLK, 0);//  选择定时器时钟源
         TIMER_Open(TIMER0, TIMER_PERIODIC_MODE, 140);//  最后一个参数表示每1秒钟进入多少次中断
         BSP_BaseEnableInt();//开中断
}
2.在进行PWM的初始化配置,配置PWM的频率为32K.
void BSP_PWMInit(void)
{
         CLK_EnableModuleClock(PWM0_MODULE);
         CLK_SetModuleClock(PWM0_MODULE,CLK_CLKSEL1_PWM0CH01SEL_HCLK, 0);
         SYS_ResetModule(PWM0_RST);
         
         /*Set GPA multi-function pins for PWM0 Channel0 */
         SYS->GPA_MFP  = (SYS->GPA_MFP &(~SYS_GPA_MFP_PA12MFP_Msk) ) | SYS_GPA_MFP_PA12MFP_PWM0CH0;
                            /*set PWM0 channel 0 output configuration */
   PWM_ConfigOutputChannel(PWM0, PWM_CH0, 32000, 0);
   /* Enable PWM Output path for PWM0 channel 0 */
   PWM_EnableOutput(PWM0, 0x1);
           // Start
   PWM_Start(PWM0, 0x1);
}
3. 然后再定时器中断里面,隔一定的时间就修改一次PWM的占空比,达到改变LED亮度的目的。
uint16_t Tempcont;
void TMR0_IRQHandler(void)
{   
         staticuint8_t tstae = 0;
         staticuint8_t tCount = 0;
         staticuint8_t tIndex = 0;
         uint16_t  CnR;
   TIMER_ClearIntFlag(TIMER0);
          tCount++;
         if(tCount>=20)
         {
                   CnR=  *((__IO uint32_t *)((((uint32_t) &((PWM0)->PERIOD0)) + (0) * 12)));
                   Tempcont= PwmDutyIndex[tIndex++] * (CnR + 1)/100;
                   if(Tempcont>= 2 ) Tempcont = Tempcont -1;
                   *((__IOuint32_t *)((((uint32_t) & ((PWM0)->CMPDAT0)) + 0 * 12))) =  Tempcont;
                   if(tIndex>= (sizeof(PwmDutyIndex)/sizeof(PwmDutyIndex[0])))
                   {
                            tIndex= 0;
                   }
                   tCount= 0;
         }
}

编译通过后,把代码下载到板子上。就会发现LED灯会慢慢的量,再慢慢的灭。附件里面有录像效果图。
3902f6ceba36c74f3675f1247a815876.rar (1.67 MB, 下载次数: 0)


0
2020-9-6 14:14:03   评论 分享淘帖

只有小组成员才能发言,加入小组>>

78个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /8 下一条

快速回复 返回顶部 返回列表