⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.lis

📁 CS5532的驱动程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 01BC           ;                               }               
 01BC           ;                               //increment (word) address only when we have an uneven (byte) address
 01BC           ;                               if(i&1) address++;
 01BC           ;                       }                       
 01BC           ;               }
 01BC           ;               //Page Mode
 01BC           ;               else
 01BC           ;               {
 01BC           ;                       for(i=0;i<block_size;i++)
 01BC           ;                       {
 01BC           ;                               //If we have an uneven(奇数) byte programm the
 01BC           ;                               //high byte                     
 01BC           ;                               if(i&1)
 01BC           ;                               {
 01BC           ;                                       SPIWrite(msg_buffer[5]|(1<<3));         //高字节
 01BC           ;                               }
 01BC           ;                               else
 01BC           ;                               {
 01BC           ;                                       SPIWrite(msg_buffer[5]);                //低字节
 01BC           ;                               }
 01BC           ;                               SPIWrite16(address);
 01BC           ;                               SPIWrite(msg_buffer[i+10]);
 01BC           ;                               //Check if we can do polling//用于数据轮寻,随意找一个地址
 01BC           ;                               if(msg_buffer[8]!=msg_buffer[i+10])
 01BC           ;                               {
 01BC           ;                                       //We have to check if we have an uneven byte. 
 01BC           ;                                       //Set the polling address to a byte address
 01BC           ;                                       //so that we can poll the right location
 01BC           ;                                       polling_address = (address&0xFFFF)*2;
 01BC           ;                                       if(i&1) polling_address++;
 01BC           ;                               }
 01BC           ;                               
 01BC           ;                               //increment (word) address only when we have an uneven (byte) address
 01BC           ;                               if(i&1) address++;
 01BC           ;                       }
 01BC           ;                       //If this page is complete the bit 7 of mode will be set and we programm the page
 01BC           ;                       if(mode&0x80)  //页编程,并且选择等待的方式
 01BC           ;                       {
 01BC           ;                               SPIWrite(msg_buffer[6]);        
 01BC           ;                               SPIWrite16(start_address);
 01BC           ;                               SPIWrite(0x00);
 01BC           ;                               //If we have no valid polling address switch to simple wait mode
 01BC           ;                               if(polling_address==0)
 01BC           ;                               {
 01BC           ;                                       mode = (mode&(~0x70)) | 0x10;
 01BC           ;                               }
 01BC           ;                               //Different polling methods
 01BC           ;                               //Hard waiting
 01BC           ;                               if((mode&0x70) == 0x10)
 01BC           ;                               {
 01BC           ;                                       msDelay(msg_buffer[4]);
 01BC           ;                               }
 01BC           ;                               //Data polling
 01BC           ;                               else if((mode&0x70) == 0x20)
 01BC           ;                               {
 01BC           ;                                       do{
 01BC           ;                                               //If we have an uneven byte read the
 01BC           ;                                               //high byte                     
 01BC           ;                                               if(polling_address%2)
 01BC           ;                                               {
 01BC           ;                                                       SPIWrite(msg_buffer[7]|(1<<3));
 01BC           ;                                               }
 01BC           ;                                               else
 01BC           ;                                               {
 01BC           ;                                                       SPIWrite(msg_buffer[7]);
 01BC           ;                                               }
 01BC           ;                                               SPIWrite16(polling_address/2);
 01BC           ;                                               tmp=SPIWrite(0x00);
 01BC           ;                                       }while(tmp==msg_buffer[8]);
 01BC           ;                               }
 01BC           ;                               //RDY/BSY polling
 01BC           ;                               else if((mode&0x70) == 0x40)
 01BC           ;                               {
 01BC           ;                                       while(universalComm(0xF0,0x00,0x00,0x00)&1);
 01BC           ;                               }
 01BC           ;                               //If something was not correct with the given mode do
 01BC           ;                               //hard waiting. Should never reach this point
 01BC           ;                               else
 01BC           ;                               {
 01BC           ;                                       msDelay(msg_buffer[4]);                                 
 01BC           ;                               }
 01BC           ;                       }
 01BC           ;               }
 01BC           ;               num_bytes = 2;
 01BC           ;               msg_buffer[0] = CMD_PROGRAM_FLASH_ISP;
 01BC           ;       }
 01BC           ;       //命令CMD_READ_FLASH_ISP
 01BC           ;       else if(cmd==CMD_READ_FLASH_ISP)
 01BC           ;       {
 01BC           ;               LED_FLASH2;     
 01BC           ;               block_size = ((unsigned int)msg_buffer[1])<<8;
 01BC           ;               block_size |= msg_buffer[2];
 01BC           ;               tmp = msg_buffer[3];
 01BC           ;               
 01BC           ;               for(i=0;i<block_size;i++)
 01BC           ;               {
 01BC           ;                       //Select Low or High-Byte
 01BC           ;                       if(i&1)
 01BC           ;                       {
 01BC           ;                               SPIWrite(tmp|(1<<3));
 01BC           ;                       }
 01BC           ;                       else
 01BC           ;                       {
 01BC           ;                               SPIWrite(tmp);
 01BC           ;                       }
 01BC           ;                       
 01BC           ;                       SPIWrite16(address&0xFFFF);
 01BC           ;                       msg_buffer[i+2] = SPIWrite(0);
 01BC           ;                       //increment (word) address only when we have an uneven (byte) address
 01BC           ;                       if(i&1) address++;
 01BC           ;               }
 01BC           ;               
 01BC           ;               num_bytes = block_size+3;
 01BC           ;               msg_buffer[0] = CMD_READ_FLASH_ISP;
 01BC           ;               msg_buffer[1] = STATUS_CMD_OK;
 01BC           ;               msg_buffer[block_size+2] = STATUS_CMD_OK;
 01BC           ;       }
 01BC           ;       //命令CMD_PROGRAM_EEPROM_ISP
 01BC           ;       else if(cmd==CMD_PROGRAM_EEPROM_ISP)
 01BC           ;       {
 01BC           ;               block_size = ((unsigned int)msg_buffer[1])<<8;
 01BC           ;               block_size |= msg_buffer[2];
 01BC           ;               mode = msg_buffer[3];
 01BC           ;               
 01BC           ;               //Byte Mode
 01BC           ;               if((mode&1) == 0)
 01BC           ;               {               
 01BC           ;                       for(i=0;i<block_size;i++)
 01BC           ;                       {       
 01BC           ;                               LED_FLASH2;     
 01BC           ;                               SPIWrite(msg_buffer[5]);                                                                
 01BC           ;                               SPIWrite16(address&0xFFFF);
 01BC           ;                               SPIWrite(msg_buffer[i+10]);
 01BC           ;                               
 01BC           ;                               //Check if we can do polling
 01BC           ;                               if((msg_buffer[i+10]!=msg_buffer[8])&&(msg_buffer[i+10]!=msg_buffer[9]))
 01BC           ;                               {
 01BC           ;                                       polling_address = address&0xFFFF;
 01BC           ;                               }
 01BC           ;                               //If not switch the mode hard waiting
 01BC           ;                               else
 01BC           ;                               {
 01BC           ;                                       mode = (mode&(~0x0E)) | 0x02;
 01BC           ;                               }
 01BC           ;                               
 01BC           ;                               //Different polling methods
 01BC           ;                               //Hard waiting
 01BC           ;                               if((mode&0x0E) == 0x02)
 01BC           ;                               {
 01BC           ;                                       msDelay(msg_buffer[4]);
 01BC           ;                               }
 01BC           ;                               //Data polling
 01BC           ;                               else if((mode&0x0E) == 0x04)
 01BC           ;                               {
 01BC           ;                                       do{
 01BC           ;                                               SPIWrite(msg_buffer[7]);
 01BC           ;                                               SPIWrite16(polling_address);
 01BC           ;                                               tmp=SPIWrite(0x00);
 01BC           ;                                       }while((tmp==msg_buffer[8])||(tmp==msg_buffer[9]));
 01BC           ;                               }
 01BC           ;                               //RDY/BSY polling
 01BC           ;                               else if((mode&0x0E) == 0x08)
 01BC           ;                               {
 01BC           ;                                       while(universalComm(0xF0,0x00,0x00,0x00)&1);
 01BC           ;                                       //while(spi_transfer_32(0xF0000000)&1);
 01BC           ;                               }
 01BC           ;                               //If something was not correct with the given mode do
 01BC           ;                               //hard waiting. Should never reach this point
 01BC           ;                               else
 01BC           ;                               {
 01BC           ;                                       msDelay(msg_buffer[4]);                                 
 01BC           ;                               }
 01BC           ;                               
 01BC           ;                               //increment address
 01BC           ;                               address++;
 01BC           ;                       }                       
 01BC           ;               }
 01BC           ;               //Page Mode
 01BC           ;               else
 01BC           ;               {
 01BC           ;                       
 01BC           ;                       for(i=0;i<block_size;i++)
 01BC           ;                       {
 01BC           ;                               LED_FLASH2;
 01BC           ;                               SPIWrite(msg_buffer[5]);
 01BC           ;                               SPIWrite16(address&0xFFFF);
 01BC           ;                               SPIWrite(msg_buffer[i+10]);
 01BC           ;                               //Check if we can do polling
 01BC           ;                               if((msg_buffer[i+10]!=msg_buffer[8])&&(msg_buffer[i+10]!=msg_buffer[9]))
 01BC           ;                               {
 01BC           ;                                       polling_address = address&0xFFFF;
 01BC           ;                               }
 01BC           ;                               
 01BC           ;                               //increment (word) address only when we have an uneven (byte) address
 01BC           ;                               address++;
 01BC           ;                       }
 01BC           ;                       
 01BC           ;                       //If this page is complete the bit 7 of mode will be set and we programm the page
 01BC           ;                       if(mode&0x80)
 01BC           ;                       {
 01BC           ;                               SPIWrite(msg_buffer[6]);                                                
 01BC           ;                               SPIWrite16(start_address&0xFFFF);
 01BC           ;                               SPIWrite(0);
 01BC           ;                               
 01BC           ;                               //If we have no valid polling address switch to simple wait mode
 01BC           ;                               if(polling_address==0)
 01BC           ;                               {
 01BC           ;                                       mode = (mode&(~0x70)) | 0x10;
 01BC           ;                               }
 01BC           ;                               
 01BC           ;                               //Different polling methods
 01BC           ;                               //Hard waiting
 01BC           ;                               if((mode&0x70) == 0x10)
 01BC           ;                               {
 01BC           ;                                       msDelay(msg_buffer[4]);
 01BC           ;                               }
 01BC           ;                               //Data polling
 01BC           ;                               else if((mode&0x70) == 0x20)
 01BC           ;                               {
 01BC           ;                                       do{
 01BC           ;                                               //If we have an uneven byte read the
 01BC           ;                                               //high byte                     
 01BC           ;                                               if(i&1)
 01BC           ;                                               {
 01BC           ;                                                       SPIWrite(msg_buffer[7]|(1<<3));
 01BC           ;                                               }
 01BC           ;                                               else
 01BC           ;                                               {
 01BC           ;                                                       SPIWrite(msg_buffer[7]);
 01BC           ;                                               }
 01BC           ;                                               SPIWrite16(polling_address);
 01BC           ;                                               tmp=SPIWrite(0x00);
 01BC           ;                                       }while(tmp==msg_buffer[8]);
 01BC           ;                               }
 01BC           ;                               //RDY/BSY polling
 01BC           ;                               else if((mode&0x70) == 0x40)
 01BC           ;                               {
 01BC           ;                                       while(universalComm(0xF0,0x00,0x00,0x00)&1);
 01BC           ;                               }
 01BC           ;                               //If something was not correct with the given mode do
 01BC           ;                               //hard waiting. Should never reach this point
 01BC           ;                               else
 01BC           ;                               {
 01BC           ;                                       msDelay(msg_buffer[4]);                                 
 01BC           ;                               }
 01BC           ;                       }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -