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

    文章

    60

    浏览量

    3747
  • 开发板试用
    +关注

    关注

    3

    文章

    303

    浏览量

    2642
  • UCM108E
    +关注

    关注

    0

    文章

    13

    浏览量

    216
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    1218 MHz 高输出 GaN CATV 功率倍增 Amp扩音 skyworksinc

    电子发烧友网为你提供()1218 MHz 高输出 GaN CATV 功率倍增 Amp扩音相关产品参数、数据手册,更有1218 MHz 高输出 GaN CATV 功率倍增
    发表于 09-01 18:30
    1218 MHz 高输出 GaN CATV 功率倍增<b class='flag-5'>器</b> <b class='flag-5'>Amp</b>扩音<b class='flag-5'>器</b> skyworksinc

    870 MHz、25 dB 增益 CATV 功率倍增 Amp扩音 skyworksinc

    电子发烧友网为你提供()870 MHz、25 dB 增益 CATV 功率倍增 Amp扩音相关产品参数、数据手册,更有870 MHz、25 dB 增益 CATV 功率倍增
    发表于 09-01 18:30
    870 MHz、25 dB 增益 CATV 功率倍增<b class='flag-5'>器</b> <b class='flag-5'>Amp</b>扩音<b class='flag-5'>器</b> skyworksinc

    1 GHz、28 dB 增益 CATV 功率倍增 Amp扩音 skyworksinc

    电子发烧友网为你提供()1 GHz、28 dB 增益 CATV 功率倍增 Amp扩音相关产品参数、数据手册,更有1 GHz、28 dB 增益 CATV 功率倍增
    发表于 08-29 18:35
    1 GHz、28 dB 增益 CATV 功率倍增<b class='flag-5'>器</b> <b class='flag-5'>Amp</b>扩音<b class='flag-5'>器</b> skyworksinc

    CS86706适用1~3节锂电应用,内置升压模块,2×30W立体声&amp;amp;amp;50W单声道R类音频功率放大器

    CS86706适用1~3节锂电应用,内置升压模块,2×30W立体声&amp;amp;50W单声道R类音频功率放大器
    的头像 发表于 07-16 20:42 366次阅读
    CS86706适用1~3节锂电应用,内置升压模块,2×30W立体声&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;50W单声道R类音频功率放大器

    Texas Instruments AMP-PDK-EVM子开发套件数据手册

    Texas Instruments AMP-PDK-EVM子开发套件设计用于搭配AMP-PDK-EVM主板使用。子套件选项适用于不同封装
    的头像 发表于 07-09 14:15 531次阅读
    Texas Instruments <b class='flag-5'>AMP</b>-PDK-EVM子<b class='flag-5'>板</b><b class='flag-5'>开发</b>套件数据手册

    新知|Verizon与AT&amp;amp;amp;T也可以手机直接连接卫星了

    近日,Verizon与AT&amp;T宣布,手机直连卫星方面取得重要进展,使用普通手机实现了通过卫星的视频通话。很显然,Verizon与AT&amp;T的这一举措是针对此前T-Mobile
    的头像 发表于 06-19 07:07 889次阅读
    新知|Verizon与AT&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;T也可以手机直接连接卫星了

    TFT&amp;amp;LCD,是电阻屏还是电容屏?

    TFT&amp; LCD是采用薄膜晶体管技术的液晶触摸显示,它本身并不决定是电阻屏还是电容屏。电阻屏和电容屏指的是不同的触摸技术,电容屏在现代设备中更为常见。
    的头像 发表于 04-14 13:35 1360次阅读
    TFT&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;LCD,是电阻屏还是电容屏?

    双模载波芯片CN8513&amp;amp;amp;CN8514在智能家居中的创新应用

    双模载波芯片CN8513&amp;CN8514在智能家居中的创新应用
    的头像 发表于 02-10 09:43 960次阅读
    双模载波芯片CN8513&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;CN8514在智能家居中的创新应用

    “国产双系统”出炉!复旦FMQL20SM非对称AMP:Linux + 裸机

    Linux + RTOS/裸机,但需一个主核心来控制整个系统以及其它从核心。每个处理核心相互隔离,拥有属于自己的内存,既可各自独立运行不同的任务,又可多个核心之间进行核间通信。 图 1 FMQL20SM AMP异构多核框架示意图 “非对称
    的头像 发表于 01-24 13:46 1164次阅读
    “国产双系统”出炉!复旦<b class='flag-5'>微</b>FMQL20SM非对称<b class='flag-5'>AMP</b>:Linux + 裸机

    HPLC+HRF双模载波芯片CN8513&amp;amp;amp;CN8514应用于智能楼宇

    HPLC+HRF双模载波芯片CN8513&amp;CN8514应用于智能楼宇
    的头像 发表于 01-09 10:01 1177次阅读
    HPLC+HRF双模载波芯片CN8513&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;CN8514应用于智能楼宇

    HPLC+HRF双模载波芯片CN8513&amp;amp;amp;CN8514用于智能抄表系统

    HPLC+HRF双模载波芯片CN8513&amp;CN8514用于智能抄表系统
    的头像 发表于 01-03 10:04 2383次阅读
    HPLC+HRF双模载波芯片CN8513&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;CN8514用于智能抄表系统

    新品| Atomic Echo Base 语音识别底座 &amp;amp;amp; GroveY Cable 连接线

    新品:AtomicEchoBase&amp;GroveYCable01AtomicEchoBaseFEATURESAtomicEchoBase是一款专为M5Atom系列主机设计的语音识别底座,集成
    的头像 发表于 12-27 18:35 1320次阅读
    新品| Atomic Echo Base 语音识别底座 &<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>; GroveY Cable 连接线

    如何判断产品需不需要做AT&amp;amp;amp;T认证?AT&amp;amp;amp;T测试内容和要求分享

    随着经济全球化的发展,国内越来越多产品厂商选择将自家产品出口到北美市场,而这时候各位厂商都会面临产品需不需要做AT&amp;T的问题。今天英利检测针对这一问题整理了一些关于AT&amp;T认证中
    的头像 发表于 12-23 17:46 1017次阅读
    如何判断产品需不需要做AT&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;T认证?AT&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;T测试内容和要求分享

    凌科电气YU系列工业级连接登场,解锁USB&amp;amp;Type-C多模块新体验!

    近日,凌科全新推出YU系列USB&amp;amp;Type-C多模块工业级连接,在功能上实现了全面升级。
    的头像 发表于 12-18 09:46 791次阅读

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

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