这几天一直在搞MPLAB X IDE 6.30版开发PIC32CM系列的32位单片机的开发板应用,带有触摸外设。目前来看,过程一言难尽,为了搞通这个MCC,能让MCC正常启动,破费一番周折。从6.0、6.2、6.25、6.3试了个遍,中间不断地安装、编程·、测试、卸载,熬了两个夜。没睡好,差点垮了。幸好现在终于在6.30上弄出来了。该说不说有了MCC的帮助,开发确实变方便了,但另一个问题来了。PIC32CM系列的32位单片机带有TrustZone配置,建立新工程时,一定会生成两个工程,一个是nosecure的,一个是secure的。我尝试建立nosecure的,并且在PIN指定资源为nosecure的,但触摸外设部分的代码依旧会生成在secure工程中。这种混杂的工程,怎么运行以及运行顺序,短时间内根本无法彻底理解。
最后没办法,只好把全都改成secure的,让生成的代码全部全都在secure工程,这才能够正常编译、下载、运行。但在使用touch库的时候,自动生成的代码,又出了问题。一开始没注意,以为没问题,结果运行起来后,touch处理没执行起来。开始还以为是触摸处理的代码有问题,毕竟是第一次接触Microchip的触摸外设嘛,查了半天,最后发现由MCC生成的代码是有问题的。在自动生成的初始化代码(SYS_Initialize函数)中:
void SYS_Initialize ( void* data ) {
PM_Initialize();
NVMCTRL_SEC_REGS->NVMCTRL_CTRLB = NVMCTRL_CTRLB_RWS(2);
PORT_Initialize();
CLOCK_Initialize();
NVMCTRL_Initialize();
EVSYS_Initialize();
touch_init();
RTC_Initialize();
NVIC_Initialize();
}注意看:
touch_init(); RTC_Initialize();
触摸外设需要使用RTC资源,结果代码中初始化的逻辑错了,应该改成:
RTC_Initialize(); touch_init();
这个顺序才是正常的。
经过这样的修改,程序终于可以正常检测触摸了。
我要赚赏金
