您尚未登录。

楼主 # 2022-09-11 01:02:21

XMGroupe.
会员
注册时间: 2022-08-22
已发帖子: 12
积分: 237

[XMG助力国产][写给新手]一些常见的坑_持续更新...

[XMG助力国产生态]
@XMGroupe.

此贴记录了拿到核心板使用至今踩过的一些坑。
----------------------------------------------
0、IO口的常见配置在工程的GPIO_GPCOM_TIMER_Example.c文件中,一些常见操作可以参考或修改参数直接使用,如果不小心将其加入到了编译。只需要在对应.c文件上右键 点击 Include/Exclude From Build即可。

1、设置IO COM模式后,如果想要使用GPIO_GET_INPUT_VALUE_SAFE来读取IO的电平,需要同时使能COM对应的GPIO时钟
例如:
INTDEV_SET_CLK_RST(COMx,(INTDEV_RUN|INTDEV_IS_GROUP0|INTDEV_CLK_IS_CORECLK_DIV8));
此处没有使能GPIOx_BASE_ADDR的时钟,
此时使用GPIO_GET_INPUT_VALUE_SAFE读取对应IO电平将得到全0值,
但是GPIO_GET_INPUT_VALUE_FAST可以正常使用。

INTDEV_SET_CLK_RST(COMx,(INTDEV_RUN|INTDEV_IS_GROUP0|INTDEV_CLK_IS_CORECLK_DIV8));
INTDEV_SET_CLK_RST(GPIOx_BASE_ADDR,(INTDEV_RUN|INTDEV_IS_GROUP0|INTDEV_CLK_IS_CORECLK_DIV8));
此处使能了GPIOx_BASE_ADDR的时钟,
此时使用GPIO_GET_INPUT_VALUE_SAFE和GPIO_GET_INPUT_VALUE_FAST均可读取对应IO电平。

2、使用GPIO_GET_INPUT_VALUE_XXXX读取的电平返回值是十六位无符号,请注意被赋值变量的位数是否合理。

3、MC3172.h文件中第212行存在一处bug,应修改为
#define GPIO_GET_INPUT_VALUE_FAST(GPIO_SEL)     (*(volatile u16*)(GPIO_SEL+GPIO_READ_REAL_INPUT_VALUE_ADDR))

4、GPIO_SET_OUTPUT_PIN_VALUE用来设置IO的输出电平,其mask表示指定的IO口,value为16位输入,不要直接对value赋1或0进行设置
错误范例
GPIO_SET_OUTPUT_PIN_VALUE(GPIOA_BASE_ADDR,GPIO_PIN4,1);//A4设置为高电平
此处value值为0x0001,对应二进制 0000 0000 0000 0001,pin4为0
正确设置
GPIO_SET_OUTPUT_PIN_VALUE(GPIOA_BASE_ADDR,GPIO_PIN4,0x0010);//A4设置为高电平

5、有些功能需要IO口输入输出功能,参照51单片机,此处不必纠结太多,当需要在输入或输出切换时,只需要在对应的input函数或set函数前面加一句
GPIO_SET_OUTPUT_EN_VALUE(GPIOx_BASE_ADDR,GPIO_PINx,GPIO_SET_ENABLE);
GPIO_SET_INPUT_EN_VALUE(GPIOx_BASE_ADDR,GPIO_PINx,GPIO_SET_ENABLE);
即可。

6、外设速度与线程速度无关,在设置对应的外设COMx时,时钟分频是以系统主时钟进行分频的,与线程的频率无关,例如系统主时钟采用内部高速RC 192MHz,则在对COMx进行分频时,其分频基准为192M,与线程的1/4 1/8...无关。

7、断开USB线和核心板连接前,应先在烧写软件中进行断开连接操作,否则重新插入后烧写程序会无响应闪退。

*个人见解,不代表官方,如果有错误或描述不恰当的地方,欢迎官方和各位大佬批评指正。
*后面遇到新的坑会持续更新,

离线

#1 2022-09-11 15:03:15

support_gxchip
Moderator
注册时间: 2022-07-26
已发帖子: 48
积分: 103

Re: [XMG助力国产][写给新手]一些常见的坑_持续更新...

太厉害了

离线

楼主 #2 2022-09-12 19:45:42

XMGroupe.
会员
注册时间: 2022-08-22
已发帖子: 12
积分: 237

Re: [XMG助力国产][写给新手]一些常见的坑_持续更新...

8、使用多个线程刷新显示屏时,需要加入一个刷新忙碌标志位,否则屏幕会乱码。

离线

楼主 #3 2022-09-19 13:45:34

XMGroupe.
会员
注册时间: 2022-08-22
已发帖子: 12
积分: 237

Re: [XMG助力国产][写给新手]一些常见的坑_持续更新...

9.底层的TIMER_GET_MAIN_CNT_RP函数有bug,返回值为2和3,官方技术推荐使用TIMER_GET_MAIN_CNT_ALL函数替代TIMER_GET_MAIN_CNT_RP和TIMER_GET_MAIN_CNT_ALL

//推荐使用这个
#define TIMER_GET_MAIN_CNT_ALL(TIMER_SEL,main_cnt,main_cnt_rp)          main_cnt = (*(volatile u32*)(TIMER_SEL+0x12*8));\
                                                                        main_cnt_rp = main_cnt>>24;\
                                                                        main_cnt = main_cnt&0x00ffffff

//有bug
#define TIMER_GET_MAIN_CNT_RP(TIMER_SEL,main_cnt_rp)                    main_cnt_rp = (*(volatile u8*)(TIMER_SEL+0x11*8))
#define TIMER_GET_MAIN_CNT(TIMER_SEL,main_cnt)                          main_cnt = (*(volatile u32*)(TIMER_SEL+0x10*8))

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn