在YL-K26Z开发板上配有32MB SPIflashW25Q32,它适于做字库来使用。在创建字库过程中,若采用纯程序的方式来实现,显然是不可取。若将字库先制备成BIN文件,然后再通过串行通信的方式将BIN文件的内容写入flash,则是一个较好的方式。 下面介绍一种用串行通信向flash存储器写入数据的方法,利用该原理有利于在YL-K26Z开发板上实现flash字库的创建。
要实现此功能,在原SPI例程的基础上稍加修改即可,步骤如下: (1)将MKL_uart.h文件中的 #defineUART0_IRQ_ENABLE 0 改为:
#define UART0_IRQ_ENABLE 1 (2)将MKL_uart.c文件中的中断接收函数改为: INT8U ch[20],j void UART0_IRQHandler (void) { UART0_MemMapPtr uartPtr = UART0_BASE_PTR; /* 发送中断处理程序*/ #if UART0_SEND_IRQ /* 用户定义 */ #endif #ifUART0_RECEIVE_IRQ while (UART0_S1_REG(uartPtr) &UART0_S1_RDRF_MASK) { /* 清除中断标志 */ uart0SendChar(UART0_D_REG(uartPtr)); /* 返回接收数据*/ ch[j]= UART0_D_REG(uartPtr); j++; } #endif } (3)将主函数改为: - Extern INT8U ch[20],j;
- int main (void)
- { INT8U spiid,i = 0;
- SystemCoreClockUpdate(); /* 时钟配置 */
- j=0;
- uart0Init(9600,0,0,8,1);
- printf("SPI Test Star...\n");
- gpioInit(); /* 管脚初始化 */
- spiInit(SPI0_BASE_PTR , Master); /* SPI0主机模式初始化 */
- spiid = flash_read_id(); /* 读ID */
- printf("ID=0x%x08\n",spiid);
- while(1) {
- if (j>=20)
- {
- printf("Start to erase sector 0...\n\r");
- flash_sector_erase (0x000000);
- myDelay(300); /* 延时 */
- ledSet(0) ; /* 若SPI擦出完成,则D2灯亮 */
- printf("Start to write sector 0...\n\r");
- flash_write_sector(0x000000, SNDBUFPT,20); /* 以0x0为起始地址执行写 */
- myDelay(30);
- ledSet(1); /* 若SPI写入完成,则D3灯亮 */
- printf("Start to read sector 0...\n\r"); /* 数组中的数据写入芯片 */
- flash_read_data(0x000000, ch,20); /* 以0x0为起始地址执行读 */
- for (i = 0;i < 20;i++)
- {
- uart1SendChar (ch[i]);
- }
- printf("ok...");
- ledSet(2); /* 若SPI读取完成,则D4灯亮 */
- }
- }
- }
复制代码
|