中北大学2009届毕业设计说明书
4 系统软件设计
4.1 软件总体设计
程序的控制思想:系统运行后初始化系统变量、初始化串行口和中断源、启动键盘扫描子程序,设计程序将完成Data Flash中存储的数据通过串行口发送到PC机;并完成单次数据采集并存储到Data Flash中;以及删除Data Flash中原有数据,等待下次存储[15]。 4.2 子程序设计
24CXX存储器可以通过ISP/IAP技术对其内部Data Flash进行擦除、读取和写入操作。
4.2.1 24CXX存储器Data Flash的字节读
24CXX存储器Data Flash进行字节读的过程如图4.1
地址赋值 写入读命令 打开ISP,IAP功能 触发ISP_IAP 关闭ISP,IAP功能 返回读取到的数据
图4.1 Data Flash字节读流程
第 26 页 共 38 页
中北大学2009届毕业设计说明书
如果24CXX存储器读取成功,将会返回读取到的数据,否则无返回。 程序如下:
/* ================ 公用的触发代码 ==================== */ void ISPgoon(void) { }
/* ==================== 字节读 ======================== */ uchar byte_read(uint byte_addr) { }
4.2.2 24CXX存储器Data Flash的字节写
24CXX存储器Data Flash的字节写操作流程如图4.2所示。写入正确则返回OK以示成功写入,写入错误则返回ERROR表示写入失败[16]。
ISP_ADDRH = (uchar)(byte_addr >> 8); /* 地址赋值 ISP_ADDRL = (uchar)(byte_addr & 0x00ff); ISP_CMD = ISP_CMD ISP_CMD = ISP_CMD ISPgoon();
& 0xf8;
/* 清除低3位 */
*/
ISP_IAP_enable(); ISP_TRIG = 0x46; ISP_TRIG = 0xb9; _nop_();
/* 打开 ISP,IAP 功能 */ /* 触发ISP_IAP命令字节1 */ /* 触发ISP_IAP命令字节2 */
| ReadCommand; /* 写入读命令 */
/* 触发执行
*/
*/
ISP_IAP_disable(); return (ISP_DATA);
/* 关闭ISP,IAP功能 /* 返回读到的数据 */
第 27 页 共 38 页
中北大学2009届毕业设计说明书
打开ISP,IAP功能 地址赋值 取数据 写入读命令 读取数据 比较对错 返回ERROR 返回OK 图4.2 Data Flash的字节写操作流程
程序如下:
/* ===================== 字节写 ===================== */ uchar byte_write(uint addr, uchar wdata) { ISP_IAP_enable();
/* 打开IAP功能
*/
ISP_ADDRH = (uchar)(addr >> 8); ISP_ADDRL = (uchar)(addr & 0x00ff); ISP_DATA = wdata;
/* 取数据 */ ISP_CMD = ISP_CMD & 0xf8;
/* 清低3位
*/
ISP_CMD = ISP_CMD | PrgCommand; /* 写命令2 */
ISP_TRIG = 0x46;
/* 触发ISP_IAP命令字节1 */
第 28 页 共 38 页
中北大学2009届毕业设计说明书
}
4.2.3 24CXX存储器Data Flash的扇区擦除操作
Data Flash的扇区擦除操作的流程如图 4.3所示 ,擦除扇区时必需一次擦除一个扇区,不能跨扇区擦除,所以每次调用扇区擦除子程序时输入的地址都为每个扇区的首地址。所以在启动单次采集前要进行手动擦除扇区[17]。
ISP_TRIG = 0xb9; _nop_(); /* 读回来 */ ISP_DATA = 0x00;
ISP_CMD = ISP_CMD & 0xf8;
/* 清低3位
*/ */
/* 触发ISP_IAP命令字节2 */
ISP_CMD = ISP_CMD | ReadCommand;/* 读命令1 ISP_TRIG = 0x46; ISP_TRIG = 0xb9; _nop_(); /* 比较对错 */ if(ISP_DATA != wdata) { }
ISP_IAP_disable(); return Error;
/* 触发ISP_IAP命令字节1 */ /* 触发ISP_IAP命令字节2 */
ISP_IAP_disable(); return Ok;
第 29 页 共 38 页
中北大学2009届毕业设计说明书
打开ISP,IAP功能 地址赋值 写入读命令 触发执行 关闭ISP,IAP功能
图4.3 Data Flash的扇区擦除操作流程
程序如下:
/* ================== 扇区擦除 ======================== */ void sector_erase(uint sector_addr) { }
4.2.4 ADS774的A/D采集流程
第 30 页 共 38 页
uint iSectorAddr;
iSectorAddr = (sector_addr & 0xfe00); /* 取扇区地址 */ ISP_ADDRH = (uchar)(iSectorAddr >> 8); ISP_ADDRL = 0x00;
ISP_CMD = ISP_CMD & 0xf8;
/* 清空低3位 */
/* 擦除命令3 */
*/ */
ISP_CMD = ISP_CMD | EraseCommand; ISPgoon();
/* 触发执行
ISP_IAP_disable(); /* 关闭ISP,IAP功能