| 在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灯亮 */
         }
   }
}
 
 |