【WCH蓝牙系列芯片】-基于CH592开发板—两个工程文件程序跳转运行实现方法
-------------------------------------------------------------------------------------------------------------------------------------
这里以CH592芯片为例,实现这个过程。将例程中的蓝牙从机程序和例程中的PDF程序,这两个工程文件程序,通过跳转方式切换运行。
一、

-
(int *) 0x4B000:-
将地址
0x4B000转换为一个int类型的指针。为了将地址转换为一个可以操作的指针类型。
-
2.(void (*)(void)):
将 int 类型的指针转换为一个函数指针,类型为 void (*)(void)。这种转换表示将地址 0x4B000 视为一个函数的入口地址。
在使用的时候,直接向调用普通函数一样直接调用jumpApp()
二、这个地址 0x4B000通过计算是flash300K的位置,所以在蓝牙从机中需要在LD文件中修改FLASH配置位置。
在FLASH中,ORIGIN = 0x00000000是将起始地址从0x00000000开始设置, LENGTH = 300K 表示FLASH 区域的大小是300 KB。

在CH592的启动文件startup_CH592.S中,将用户模式的0x88更改为机器模式0x1888

四、调用jumpApp(),进行跳转到PDF程序中
在蓝牙从机中,可以添加一个检查USB是否插入的状态函数,这样,当插入USB设备之后,就正好跳转到PDF程序中的flash起始地址,开始运行PDF的程序,生成PDF文档。具体判断USB是否插入的状态,可以参考
在蓝牙从机中,通过硬件检测,将USB的5V输入脚引出来,然后通过电阻分压的方式,把CH592拉出来一个GPIO脚接上,通过GPIO的外部中断来进行唤醒和睡眠操作,当USB设备接入到主机时该引脚上产生了从低电平变到高电平的状态,从而判断为USB设备接入,USB设备工作,进入PDF程序进行生成。具体GPIO外部中断函数如下:

如果USB插入,触发外部中断,设置flag_wakeup标志位为1,然后再主循环中一直判断这个标志位是否触发,如果触发,进入函数判断中,再将flag_wakeup标志位清零,再调用调用jumpApp(),进行跳转。


最后编译一下程序,检查一下程序中,也可以看到再LD文件中,设置的300KFLASH大小是已经成功,还有观察整个蓝牙从机都使用多少的FLASH大小。
五、配置PDF程序中的LD文件

在LD文件设置中,ORIGIN = 0x0004B000是将起始地址从0x0004B000开始设置, LENGTH = 100K 表示FLASH 区域的大小是100 KB。
当之前的蓝牙从机插入USB设备,程序就会跳转到0x0004B000这个地址开始运行PDF程序。相当于0x0004B000这个地址就是PDF程序的起始地址,程序从0x0004B000这个地址开始运行程序。给PDF这个程序设置的总共FLASH在100K的空间。具体这个LENGTH可以根据实际的程序来设置,CH592的用户闪存数据总共在448K。这个448K的大小可以自行分配给这两个程序。
六、修改启动文件。将用户模式的0x88更改为机器模式0x1888

七、通过串口打印的方式,来观察这两个程序跳转运行的整个状态

通过ISP工具,将这个两个工程的文件程序HEX文件同时勾选,下载到CH592中。

其实大致步骤就三步:
1、改LD文件参数
2、修改启动文件(startup_CH592.S)
3、调用jumpApp()
浙公网安备 33010602011771号