0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【御芯微UCM108E开发板试用体验】UCM108E二次开发-外部中断&&定时器&&PWM使用

开发板试用精选 来源:开发板试用 作者:电子发烧友论坛 2022-11-24 17:03 次阅读

本文来源电子发烧友社区,作者:许鹏虎, 帖子地址:https://bbs.elecfans.com/jishu_2287620_1_1.html

UCM108E二次开发-外部中断&&定时器&&PWM使用

这节内容主要是介绍UCM108E的片内外设使用情况,同样也是用官方提供的二次开发demo来做进一步的开发。

GPIO外部中断

UC8188的GPIO使用起来比较简单,官方也提供了比较全面的函数库。GPIO控制器可以驱动或者获取信号/数据。通过相应的寄存器,可以定义I/O的功能、方向、状态以及中断。

GPIO的主要特点

  - 受控I/O个数微29
  - I/O输入/输出可配
  - 输入/输出状态:上拉、浮空
  - 所有I/O均可作为中断源,触发方式可配:低电平、高电平、上升沿、下降沿
  - I/O功能多重复用

同时也需要指出,GPIO的功能并没有类似于STM32类型的MCU多,比如IO都不支持下拉功能,所以在进行硬件设计的时候,需要详细参考GPIO特性,在硬件设计上面不足或者规避这些不足。

编写示例函数

操作GPIO为外部中断触发模式,主要是由以下几个步骤:

  1. 将IO设置为输入模式-->设置中断触发类型-->使能中断-->使能全局中断
static void trigger_gpio_init(void)
{
    gpio_set_pin_direction(UC_GPIO, TRIGGER_GPS_PPS_GPIO, GPIO_DIR_IN);
    gpio_set_irq_type(UC_GPIO, TRIGGER_GPS_PPS_GPIO, GPIO_IT_RISE_EDGE);
    gpio_set_irq_en(UC_GPIO, TRIGGER_GPS_PPS_GPIO, 1);
    gpio_int_enable();//enable gpio interrupt
    printf("trigger gpio pin init done.rn");
}
  1. 编写中断服务函数-->获取中断状态-->清除中断标记位
/*
 * [url=home.php?mod=space&uid=2666770]@Brief[/url]   GPIO interrupt service function
 * [url=home.php?mod=space&uid=3142012]@param[/url] 	None
 * @retval  None
 */
void gpio_handler(void)
{
    uint32_t pin, status;

    status = gpio_get_irq_status(UC_GPIO);  // get gpip irq status
    gpio_int_clear_pending();               // clear gpio interrupt pending

    for (pin = GPIO_PIN_0; pin <= GPIO_PIN_29; pin++) {
        if (status & (1 << pin)) {
            printf("GPIO %d INTERRPUTrn", pin);
        }
    }
}

注意:

  1. 中断标记位一定要在中断服务函数里面清除,不然下次无法继续触发中断
  2. 中断服务函数的入口是gpio_handler,在UC8188的单独示例中,中断服务函数是ISR_GPIO
  3. 在本示例工程的libraries/HAL_Drivers/drv_gpio.c中也有gpio_handler需要将此先屏蔽,然后自己实现这个中断服务函数

烧录运行

将上述代码编译完成后,烧录到开发板运行,然后手动触发GPIO25,可以看到中断打印

Time: 2022/6/18 19:53:38.00
POS: ST 10, tLon 1.899968, tLat 0.596802, fAlt: 38.554977
Time: 2022/6/18 19:53:39.00
POS: ST 10, tLon 1.899968, tLat 0.596802, fAlt: 38.554977
Time: 2022/6/18 19:53:40.00
POS: ST 10, tLon 1.899968, tLat 0.596802, fAlt: 38.554977
Time: 2022/6/18 19:53:41.00
POS: ST 10, tLon 1.899968, tLat 0.596802, fAlt: 38.554977
GPIO 25 INTERRPUT
Time: 2022/6/18 19:53:42.00
POS: ST 10, tLon 1.899968, tLat 0.596802, fAlt: 38.554977
GPIO 25 INTERRPUT
Time: 2022/6/18 19:53:43.00
POS: ST 10, tLon 1.899968, tLat 0.596802, fAlt: 38.554977
GPIO 25 INTERRPUT
Time: 2022/6/18 19:53:44.00
POS: ST 10, tLon 1.899968, tLat 0.596802, fAlt: 38.554977
GPIO 25 INTERRPUT

定时器

UC8188有两个独立的定时器,设计的也比较简单。

主要特点

  • 32位加计数器
  • 3位可编程(可以实时修改)预分频器,定时器时钟=系统时钟/(预分频系数+1)
  • 两种中断或事件类型可选择,即计数器溢出和比较结果相等触发

编写示例函数

我主要是用定时器来做一个精确计时,所以只用了定时中断功能。在确定定时时间之前,需要确定系统主频,分频系数等关键指标。通过研读代码我们可知在启动函数那里,配置了系统主频

addi   x11, x0, 70  //131.072Mhz-->0xc80000, 115200 for sim
  jal  uart_set_cfg
  1. 配置分频系数和计数值-->工作在计数模式-->使能计数溢出中断-->使能总中断
cfg.pre = 7;
	cfg.cnt = 0xffffffffU - ((SYSTEM_CLK>>8)/(cfg.pre+1))*1;// 1/256 S
	cfg.cmp = 0;//It must be 0 in this mode.
	timer_init(UC_TIMER1, &cfg);
	timer_enable(UC_TIMER1);
	timer_int_enable(UC_TIMER1, TIMER_IT_OVF);
	int_enable();
  1. 编写中断服务函数-->清除中断-->重新装入计数值-->做自己的业务
static int cnt = 0;

	timer_int_clear_pending(UC_TIMER1, TIMER_IT_OVF);
	// 这里和上面的初始化是一样的,简化了一下算法
	timer_set_count(UC_TIMER1, 0xffffffffU - (SYSTEM_CLK>>11));//1S]
    cnt++;
    if(cnt%0xff == 0){
        printf("timer1 overflow interrupt!!!rn");
    }

烧录运行

编译上述代码,在串口工具中应该会每隔1s打印一下

timer1 overflow interrupt!!!
timer1 overflow interrupt!!!
timer1 overflow interrupt!!!
timer1 overflow interrupt!!!
timer1 overflow interrupt!!!
timer1 overflow interrupt!!!
timer1 overflow interrupt!!!
timer1 overflow interrupt!!!
timer1 overflow interrupt!!!
timer1 overflow interrupt!!!
timer1 overflow interrupt!!!
timer1 overflow interrupt!!!
timer1 overflow interrupt!!!

PWM

PWM外设相对来说也是比较简单。

特点

  • 四路独立输出PWM
  • 可配置周期和占空比

编写示例函数

我的需求是,可以调节一个灯的亮度,并且可以周期的控制灯的闪烁逻辑。

  1. 确定PWM外接的GPIO管脚,使能对应的PWM--> 设置周期-->设置占空比
pwm_enable(UC_PWM3);
    pwm_set_period(UC_PWM3, 1000);
    pwm_set_duty(UC_PWM3, 300);
  1. 周期闪烁
while(1)
    {
        printf("cnt : %drn", cnt++);
        pwm_set_duty(UC_PWM3, 30);  // led on light:3%
        delay_ms(500);
        pwm_set_duty(UC_PWM3, 0);  // led off
        delay_ms(500);
    }

注意:这里我尝试使用pwm_enablepwm_disable来控制灯的亮灭,但是发现pwm_disable后GPIO默认是高电平,不符合我的设计需求,故用占空比为0表示灯灭,由于PWM外设过于简单,在做硬件设计的时候需要注意这里。

烧录运行

将上述代码烧录到开发板,可以看到1s一次打印cnt值,同时LED灯也在闪烁,改变duty可以改变led亮度

pwm test
cnt : 0
cnt : 1
cnt : 2
cnt : 3
cnt : 4
cnt : 5

总结

UC8188的外设使用起来很简单,也很实用。但是在做相关硬件设计时,需要注意。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 御芯微
    +关注

    关注

    4

    文章

    56

    浏览量

    3319
  • 开发板试用
    +关注

    关注

    3

    文章

    301

    浏览量

    2092
  • UCM108E
    +关注

    关注

    0

    文章

    13

    浏览量

    149
收藏 人收藏

    评论

    相关推荐

    北美运营商AT&amp;amp;amp;T认证中的VoLTE测试项

    北美运营商AT&amp;T的认证测试内容涵盖了多个方面,以确保设备和服务的质量、兼容性以及用户体验。在AT&amp;T的认证测试中,VoLTE(VoiceoverLTE)测试项是一个重要的组成部分
    的头像 发表于 12-06 16:52 126次阅读
    北美运营商AT&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;T认证中的VoLTE测试项

    北美运营商AT&amp;amp;amp;T认证的测试内容有哪些?

    北美运营商AT&amp;T的认证测试内容涵盖了多个方面,以确保设备和服务的质量、兼容性以及用户体验。以下是英利检测整合的AT&amp;T认证的主要测试内容:基础认证测试联邦通信委员会(FCC
    的头像 发表于 11-12 17:39 203次阅读
    北美运营商AT&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;T认证的测试内容有哪些?

    能力再次提升! 迅为RK3588/RK3568开发板&amp;amp;amp;核心新增定制分区镜像

    能力再次提升! 迅为RK3588/RK3568开发板&amp;核心新增定制分区镜像
    的头像 发表于 11-06 15:11 431次阅读
    能力再次提升! 迅为RK3588/RK3568<b class='flag-5'>开发板</b>&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;核心<b class='flag-5'>板</b>新增定制分区镜像

    迅为itop-3568开发板AMP双系统使用手册之烧写AMP镜像

    迅为itop-3568开发板AMP双系统使用手册之烧写AMP镜像
    的头像 发表于 11-04 15:00 417次阅读
    迅为itop-3568<b class='flag-5'>开发板</b><b class='flag-5'>AMP</b>双系统使用手册之烧写<b class='flag-5'>AMP</b>镜像

    北美运营商AT&amp;amp;amp;T认证的费用受哪些因素影响

    申请北美运营商AT&amp;T认证的价格因多种因素而异,包括产品类型、认证范围、测试难度等。一般来说,申请AT&amp;T认证的费用可能相对较高,因为AT&amp;T作为北美地区的主要电信运营商,其
    的头像 发表于 10-16 17:10 201次阅读
    北美运营商AT&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;T认证的费用受哪些因素影响

    onsemi LV/MV MOSFET 产品介绍 &amp;amp;amp; 行业应用

    01直播介绍直播时间2024/10/281430直播内容1.onsemiLV/MVMOSFET产品优势&amp;市场地位。2.onsemiLV/MVMOSFETRoadmap。3.onsemiT10
    的头像 发表于 10-13 08:06 383次阅读
    onsemi LV/MV MOSFET 产品介绍 &<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>; 行业应用

    OC7201C资料(PCB &amp;amp; 原理图)

    电子发烧友网站提供《OC7201C资料(PCB &amp; 原理图).zip》资料免费下载
    发表于 07-18 16:19 1次下载

    FS201资料(pcb &amp;amp; DEMO &amp;amp; 原理图)

    电子发烧友网站提供《FS201资料(pcb &amp; DEMO &amp; 原理图).zip》资料免费下载
    发表于 07-16 11:24 0次下载

    北美运营商AT&amp;amp;amp;T认证入库产品范围名单相关

    AT&amp;T作为全球领先的通信服务运营商之一,通过AT&amp;T认证不仅是对产品质量的认可,更是产品打开北美市场大门的重要凭证。然而,或许您还不清楚AT&amp;T认证入库的产品范围,接下来
    的头像 发表于 06-28 16:58 444次阅读
    北美运营商AT&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;T认证入库产品范围名单相关

    解读北美运营商,AT&amp;amp;amp;T的认证分类与认证内容分享

    在数字化日益深入的今天,通信技术的稳定与安全对于个人、企业乃至整个国家都至关重要。作为北美通信领域的领军者,AT&amp;T一直致力于为用户提供高效、可靠的通信服务。而在这背后,AT&amp;T
    的头像 发表于 06-05 17:27 592次阅读
    解读北美运营商,AT&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;T的认证分类与认证内容分享

    RK3568开发板支持AMP双系统

    RK3568开发板支持AMP双系统
    的头像 发表于 06-04 15:33 706次阅读
    RK3568<b class='flag-5'>开发板</b>支持<b class='flag-5'>AMP</b>双系统

    安富利带你揭秘IP&amp;amp;E元器件的赋能之路

    IP&amp;E,是Interconnect(互连)、Passive(无源)和Electromechanical(机电)的缩写,代表着电子元器件中最为基础和重要的分支之一。
    的头像 发表于 03-26 18:18 1463次阅读

    Open RAN的未来及其对AT&amp;amp;T的意义

    3月14日消息,在“Connected America 2024”会议上,AT&amp;T高级副总裁兼网络首席技术官Yigal Elbaz讨论了Open RAN 的未来及其对AT&amp;T的意义。
    的头像 发表于 03-14 14:40 734次阅读

    【电磁兼容技术文档分享】频谱仪应用案例&amp;amp;amp;简易探头的制作

    【电磁兼容技术文档分享】频谱仪应用案例&amp;简易探头的制作
    的头像 发表于 02-19 13:20 976次阅读
    【电磁兼容技术文档分享】频谱仪应用案例&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;简易探头的制作

    RK3568--基于AMP的多通道AD采集开发

    RK3568--基于AMP的多通道AD采集开发
    的头像 发表于 01-19 10:03 963次阅读
    RK3568--基于<b class='flag-5'>AMP</b>的多通道AD采集<b class='flag-5'>开发</b>案