折腾了这么久,感觉对我来说真的是一步一个坑,可能和我也不是专业做单片机开发有关,以前接触单片机真的很少,只用过keil5开发STC15的程序,说实话真相把它扔零件箱里吃灰了。之前灯能亮起来了,这次来做个按键采集吧。记录紧接上文,来了。
7、采集个按键
板载2个按键,BOOTMODE和REST,BOOTMODE竟然就是PA0,此处浪费3小时。翻了好多文档,都没有说明BOOTMODE按键就是PA0,我也真是服了。差点我就以为BOOTMODE不能当IO来用,但是文档上又写的IO,就是不写IO几,也许厂家的工程师认为我这种小白不太适合做单片机的开发啊,哈哈。
代码很简单,tls_gpio_read就行了,也是SDK里面找。
u8 k;
......
k=tls_gpio_read(WM_IO_PA_00);
printf("n input=%d n",k);
delay(500000);
说实话,这个SDK真的帮开发者做了很多工作,各种IO的定义都一个函数实现,也不用看寄存器手册了,就是封装的命名规则还得适应一段时间,另外,这种封装的SDK就算完全掌握了也就是针对这一类的单片机,换个其它厂商的单片机,还得重新学习了。
做完按键采集,又仔细对比了W800和W801,毕竟800只有801的1/4大小,IO也少,但是价格却一样,咨询了厂家就是10k的量,这两个价格也是一样的,我也是服了。
既然能按键了,那么就来个中断吧,也不能在循环里一直判断按键啊,而且这样子反应和延迟都又问题,只是能识别能按了而已。
那就来中断了,还是那句话,得看SDK,和STC的开发完全不一样啦,又是几个小时的文档阅读,得出以下几行关键点,直接把代码和关键点全上了,写的麻烦,累了,要睡觉。
8、按键产生个中断
关键点
static void demo_gpio_isr_callback(void *context)//中断调用函数
{
u16 ret;
ret = tls_get_gpio_irq_status(WM_IO_PA_00);//取得状态,为什么返回是1才能执行呢?
if (ret){
xxxxxxxxxxxx干点啥?xxxxxxxxxxx
tls_clr_gpio_irq_status(WM_IO_PA_00); //清除中断
}
}
void UserMain(void)
{
tls_gpio_cfg(WM_IO_PA_00, WM_GPIO_DIR_INPUT, WM_GPIO_ATTR_FLOATING);//配置管脚
tls_gpio_isr_register(WM_IO_PA_00, demo_gpio_isr_callback, NULL);//注册中断
tls_gpio_irq_enable(WM_IO_PA_00, WM_GPIO_IRQ_TRIG_RISING_EDGE);//启用的意思吗?
}
全部代码:
#include "wm_include.h"
int t;
static void demo_gpio_isr_callback(void *context)//中断调用函数
{
u16 ret;
ret = tls_get_gpio_irq_status(WM_IO_PA_00);//取得状态,为什么返回是1才能执行呢?
if (ret){
t=t*0.8;
if (t<5000){t=3000000;};
printf("n It's a break %d delay time change to=%d n",ret,t);
tls_clr_gpio_irq_status(WM_IO_PA_00); //清除中断
}
}
void UserMain(void)
{
//#if DEMO_CONSOLE
// CreateDemoTask();
//#endif
//用户自己的task
printf("n user task n");
u8 i,pp,k;
i=0,t=3000000;pp=0x01;
//初始IO
tls_gpio_cfg(WM_IO_PB_00,WM_GPIO_DIR_OUTPUT,WM_GPIO_ATTR_PULLLOW);
tls_gpio_cfg(WM_IO_PB_01,WM_GPIO_DIR_OUTPUT,WM_GPIO_ATTR_PULLLOW);
tls_gpio_cfg(WM_IO_PB_02,WM_GPIO_DIR_OUTPUT,WM_GPIO_ATTR_PULLLOW);
tls_gpio_cfg(WM_IO_PA_00, WM_GPIO_DIR_INPUT, WM_GPIO_ATTR_FLOATING);//配置管脚
tls_gpio_isr_register(WM_IO_PA_00, demo_gpio_isr_callback, NULL);//注册中断
tls_gpio_irq_enable(WM_IO_PA_00, WM_GPIO_IRQ_TRIG_RISING_EDGE);//启用的意思吗?
while (1)
{
i++;
printf("n TEST%d n",i);//可以输出到控制台烧录工具就能看到,很好很开心
if (pp>0x04){pp=0x01;}
tls_gpio_write(WM_IO_PB_00,pp&0x01^pp);//写入IO
tls_gpio_write(WM_IO_PB_01,pp&0x02^pp);
tls_gpio_write(WM_IO_PB_02,pp&0x04^pp);
printf("n delay time=%d n",t);
if (i>32760){i=0;};
pp=pp<<1;
delay(t); //这个秒怎么算的?还没搞明白
}
}
上一篇:W800和W801小小白级入门记录02
下一篇:Neptune(W800芯片)开发板食用指南-SDK篇
推荐阅读最新更新时间:2024-11-09 12:37
设计资源 培训 开发板 精华推荐
- THAT1512话放
- 紧凑型 PCI 和 PCI Express 系统中热插拔和电源监控的紧凑型解决方案
- 具有跟踪功能的 LTM4608AIV 4 相、4 输出(3.3V、2.5V、1.8V 和 1.5V)DC/DC 稳压器的典型应用电路
- DC2303A-B,基于 LTC2000-14、14 位、2.5-Gsps DAC 的演示板 (FMC),具有 DDR LVDS 接口
- 使用 bq51003 和 bq25120 实现无线充电的可穿戴设备电源参考设计
- 涂卡尺
- 具有隔离功能的 -48V 电信电流/电压/功率感应
- 使用 Semtech 的 SC1105 的参考设计
- 使用 NXP Semiconductors 的 SSL1523P 的参考设计
- LTC3603IUF 3.3V、2.5A 降压稳压器、同步至 1.8MHz、小尺寸的典型应用电路
- 【EEWORLD第三十届】2011年09月社区明星人物揭晓!
- 恩智浦跨界处理器能玩出多少应用
- 全新吉时利4200A SCS参数分析仪震撼上市,邀您参与翻盖有礼!
- 看视频赢京东卡 | 泰享实测之水哥秘籍
- 【已结束】 Qorvo & Keysight 直播【新一代无线连接的挑战与应对之道】
- 走进TE物联网应用资料中心,免费下载行业趋势报告、技术干货,还有样品申请
- 有奖直播:新科技、新课堂、新学期~ ADI软件定义无线电ADALM-Pluto入门实战
- 与未来同行-是德科技创新技术峰会·北京
- 夏末秋初,玩转EE芯积分,边赚边花+礼品兑换剧透
- 双11之单片机狂欢:11.11元包邮拇指板STM32L011,抢完为止