可以通过图3看出快中断的处理流程(其他的中断处理流程类似)。
2.2 ISP执行的步骤
笔者把起到烧录Flash作用的程序单独作为一个工程编译、链接,生成.bin文件;然后把.bin文件转化成一个unsigned char型的数组,并把该数组放在一个单独的文件Programmet.c中;最后利用Scatter文件把Programmer.o定位在固定的地址空间(0x80001000~Ox80001fff,如图2所示)。这样一来,就可以编写汇编程序,把烧录程序Pro—grammer.o拷贝到RAM中,并让PC指针跳转到RAM中执行烧录。由于STR730没有外部Flash,要烧录Flash程序必须在RAM中运行,所以拷贝Programmer.o到RAM中是必需的。以下代码摘取自Startup.s。
CMP r1,#1
烧录程序Programmet的软件流程如图4所示。
需要说明的是:
①擦除Flash并不是完全擦除,而是擦除扇区0之外的其他扇区;
②数据缓冲区有限,每次只接收指定大小的数据,这样接收和烧录就可以并行进行,提高了ISP的速度;
③为了提高软件的安全性,原始的.bin文件是经过加密的,在烧录前需要将原始数据解密。