完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本次评测内容主要分享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口还有相对应的保护位,在使能的情况下只允许读,不允许写,防止误操作。下面是各种端口基本操作。 了解了IO的结构,以及寄存器以后,对IO的操作就是对寄存器的操作。 ISD9160 编译环境建立。 因为ISD9160是cortex-M0内核的CPU,所以使用IAR或者KeilMDK开发都是可行的。下面的讲解将以MDK作为平台讲解。 打开keilMDK,因为我们之前没有使用过ISD9160 这个器件,所以我们需要进行MDK的ISD9160 的PACK包安装。 第一步,点击下图红色方框的pack installed 按钮。 在弹出的如下界面中,如图找到9160的器件,然后点击 Install 按钮就可以。当然也可以进MDK官方网站下载完了以后再进行导入。(点击下图元件右侧的蓝色文字就可以跳转到官方下载页面) 官方下载页面,直接点击Download就可以下载,可以使用专门的下载软件进行下载,大文件下载会比直接在MDK编译平台那里的速度快。 安装完毕后,点击下图圆圈的魔术棒能找到9160的元件就说明安装成功了 创建工程: 比较简单,如果玩过M内核mcu的就会发现区别不大,说明9160是很容易上手的。1.添加CMSIS标准的文件以及相关的头文件,9160的SDK包里面都可以找到。2.添加外设库和系统文件3.添加用户自己的文件。完成后的工程如下: 硬件电路 GPIOA12控制着LED灯D2,J2在DEMO板上是短路的,根据此电路可知,只要使得GPIOA12端口输出低电平,此LED将会点亮,反之就熄灭 主要代码分析 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 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文件,以便烧录。 编译完成后,打开ICP下载工具,把Nulink工具通过USB接到电脑端,另外一端接到板子上,然后点击连接,成功就会如下所示,显示芯片的型号。 然后点击APROM按钮选择生成的二进制文件,接着进行配置位的设定,主要是设定启动的地址,如下 最后把软件界面拉到最底下,选择编程区域,这里只选择APROM,如下 下载完后,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
)
|
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
134个成员聚集在这个小组
加入小组【大联大品佳 NXP i.MX RT1050试用体验】 MCUXpresso IDE+语音识别(Tensorflow)测试
2654 浏览 0 评论
【大联大世平ON Semiconductor BLE5.0 RSL10开发板试用体验】+ 蓝牙键盘试验
2605 浏览 0 评论
【大联大友尚安森美半导体感光芯片USB双目摄像头模组试用体验】敏感人群自动追踪系统开发
3119 浏览 1 评论
【大联大品佳 Microchip PIC16F15324开发板试用体验】+初识及上电
2170 浏览 0 评论
【大联大世平ON Semiconductor BLE5.0 RSL10开发板试用体验】安森美IDE环境程序烧写失败的解决办法
1978 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 20:06 , Processed in 0.764182 second(s), Total 69, Slave 52 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号