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

📄 uart.lis

📁 CS5532的驱动程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 01BC           ;                               if(EEPROMread(EEP_SCK_DURATION)!=clockSpeed) 
 01BC           ;                               EEPROMwrite(EEP_SCK_DURATION,clockSpeed);
 01BC           ;                               //spi_set_speed(clock_speed);           //因为我这里不用硬件SPI 
 01BC           ;                               break;
 01BC           ;                       case PARAM_RESET_POLARITY:                      //区分51和AVR用的,1表示AVR 0表示AT89C
 01BC           ;                               if(resetPolarity != msg_buffer[2])
 01BC           ;                               {
 01BC           ;                                       resetPolarity = msg_buffer[2];
 01BC           ;                                       EEPROMwrite(EEP_RESET_POLARITY,resetPolarity);                          
 01BC           ;                               }
 01BC           ;                               break;
 01BC           ;                       case PARAM_CONTROLLER_INIT:
 01BC           ;                               paramControllerInit = msg_buffer[2];
 01BC           ;                               break;
 01BC           ;                       case PARAM_VADJUST:
 01BC           ;                               vAdjust = msg_buffer[2];
 01BC           ;                               EEPROMwrite(EEP_VOL_ADJUST,vAdjust);
 01BC           ;                               break;
 01BC           ;                       case PARAM_VTARGET:
 01BC           ;                               vTarget = msg_buffer[2]; 
 01BC           ;                               EEPROMwrite(EEP_VOL_TARGET,vTarget);
 01BC           ;                               asm("jmp 0x17FF");
 01BC           ;                               break;  
 01BC           ;                       default:break;          
 01BC           ;               }
 01BC           ;               num_bytes = 2;
 01BC           ;               msg_buffer[0] = CMD_SET_PARAMETER;
 01BC           ;               msg_buffer[1] = STATUS_CMD_OK;
 01BC           ;       }
 01BC           ;       //命令CMD_GET_PARAMETER
 01BC           ;       else if(cmd==CMD_GET_PARAMETER)
 01BC           ;       {
 01BC           ;               switch(msg_buffer[1])
 01BC           ;               {
 01BC           ;                       case PARAM_BUILD_NUMBER_LOW:
 01BC           ;                               tmp = CONFIG_PARAM_BUILD_NUMBER_LOW;
 01BC           ;                               break;
 01BC           ;                       case PARAM_BUILD_NUMBER_HIGH:
 01BC           ;                               tmp = CONFIG_PARAM_BUILD_NUMBER_HIGH;
 01BC           ;                               break;
 01BC           ;                       case PARAM_HW_VER:
 01BC           ;                               tmp = CONFIG_PARAM_HW_VER;
 01BC           ;                               break;
 01BC           ;                       case PARAM_SW_MAJOR:
 01BC           ;                               tmp = CONFIG_PARAM_SW_MAJOR;
 01BC           ;                               break;
 01BC           ;                       case PARAM_SW_MINOR:
 01BC           ;                               tmp = CONFIG_PARAM_SW_MINOR;
 01BC           ;                               break;
 01BC           ;                       case PARAM_SCK_DURATION:
 01BC           ;                               tmp = clockSpeed;
 01BC           ;                               break;
 01BC           ;                       case PARAM_RESET_POLARITY:
 01BC           ;                               tmp = resetPolarity;
 01BC           ;                               break;
 01BC           ;                       case PARAM_CONTROLLER_INIT:
 01BC           ;                               tmp = paramControllerInit;
 01BC           ;                               break;
 01BC           ;                       case PARAM_VTARGET:                             //目标电压
 01BC           ;                               tmp = vTarget;
 01BC           ;                               break;  
 01BC           ;                       case PARAM_VADJUST:
 01BC           ;                               tmp = vAdjust;                          //参考电压
 01BC           ;                               break;
 01BC           ;                       case PARAM_TOPCARD_DETECT:
 01BC           ;                               tmp = TOP_CARD_STK520;
 01BC           ;                               break;  
 01BC           ;               }
 01BC           ;               num_bytes = 3;
 01BC           ;               msg_buffer[0] = CMD_GET_PARAMETER;
 01BC           ;               msg_buffer[1] = STATUS_CMD_OK;
 01BC           ;               msg_buffer[2] = tmp;
 01BC           ;       }
 01BC           ;       //命令CMD_OSCCAL
 01BC           ;       else if(cmd==CMD_OSCCAL)
 01BC           ;       {
 01BC           ;               num_bytes = 2;
 01BC           ;               msg_buffer[0] = CMD_OSCCAL;
 01BC           ;               msg_buffer[1] = STATUS_CMD_OK;
 01BC           ;       }       
 01BC           ;       //命令CMD_LOAD_ADDRESS
 01BC           ;       else if(cmd==CMD_LOAD_ADDRESS)
 01BC           ;       {
 01BC           ;               address =  ((unsigned long)msg_buffer[1])<<24;
 01BC           ;               address |= ((unsigned long)msg_buffer[2])<<16;
 01BC           ;               address |= ((unsigned long)msg_buffer[3])<<8;
 01BC           ;               address |= ((unsigned long)msg_buffer[4]);
 01BC           ;               num_bytes = 2;
 01BC           ;               msg_buffer[0] = CMD_LOAD_ADDRESS;
 01BC           ;               msg_buffer[1] = STATUS_CMD_OK;
 01BC           ;       }
 01BC           ;       //命令CMD_FIRMWARE_UPGRADE
 01BC           ;       else if(cmd==CMD_FIRMWARE_UPGRADE)
 01BC           ;       {
 01BC           ;               num_bytes = 2;
 01BC           ;               msg_buffer[0] = CMD_FIRMWARE_UPGRADE;
 01BC           ;               //msg_buffer[1] = STATUS_CMD_OK;
 01BC           ;               msg_buffer[1] = STATUS_CMD_FAILED;
 01BC           ;               asm("jmp 0x17FF");
 01BC           ;               //进入Firmware upgrade模式
 01BC           ;       }
 01BC           ;       //命令CMD_ENTER_PROGMODE_ISP
 01BC           ;       else if(cmd == CMD_ENTER_PROGMODE_ISP)
 01BC           ;       {
 01BC           ;               prgMode=1;
 01BC           ;               spiEnable();
 01BC           ;               msDelay(msg_buffer[2]); 
 01BC           ;               LED_ON2;
 01BC           ;               for(i=0;i<msg_buffer[4];i++)
 01BC           ;               {
 01BC           ;                       SPIWrite(msg_buffer[8]);
 01BC           ;                       msDelay(msg_buffer[5]);
 01BC           ;                       SPIWrite(msg_buffer[9]);
 01BC           ;                       msDelay(msg_buffer[5]);
 01BC           ;                       if(msg_buffer[7]==3)            //AVR
 01BC           ;                       {
 01BC           ;                               tmp=SPIWrite(msg_buffer[10]);
 01BC           ;                               msDelay(msg_buffer[5]);                         
 01BC           ;                               SPIWrite(msg_buffer[11]);
 01BC           ;                               msDelay(msg_buffer[5]);                         
 01BC           ;                       }
 01BC           ;                       else                            //AT89S
 01BC           ;                       {
 01BC           ;                               SPIWrite(msg_buffer[10]);
 01BC           ;                               msDelay(msg_buffer[5]);                         
 01BC           ;                               tmp=SPIWrite(msg_buffer[11]);
 01BC           ;                               msDelay(msg_buffer[5]);
 01BC           ;                       }
 01BC           ;                       if((tmp==msg_buffer[6])||(msg_buffer[7]==0))
 01BC           ;                       {
 01BC           ;                               i=0xFF;
 01BC           ;                               LED_OFF2;
 01BC           ;                               break;
 01BC           ;                       }
 01BC           ;                       else
 01BC           ;                       {
 01BC           ;                               spiEnable();
 01BC           ;                               msDelay(msg_buffer[2]); 
 01BC           ;                       }
 01BC           ;               }
 01BC           ;               num_bytes = 2;
 01BC           ;               msg_buffer[0] = CMD_ENTER_PROGMODE_ISP;
 01BC           ;               if(i==0xFF)
 01BC           ;               {                       
 01BC           ;                       msg_buffer[1] = STATUS_CMD_OK;                  
 01BC           ;               }
 01BC           ;               else
 01BC           ;               {                       
 01BC           ;                       msg_buffer[1] = STATUS_CMD_FAILED;
 01BC           ;               }               
 01BC           ;       }
 01BC           ;       //命令 CMD_LEAVE_PROGMODE_ISP
 01BC           ;       else if(cmd==CMD_LEAVE_PROGMODE_ISP)
 01BC           ;       {
 01BC           ;               prgMode=0;              
 01BC           ;               spiDisable();
 01BC           ;               num_bytes = 2;
 01BC           ;               msg_buffer[0] = CMD_LEAVE_PROGMODE_ISP;
 01BC           ;               msg_buffer[1] = STATUS_CMD_OK;          
 01BC           ;       }
 01BC           ;       //命令CMD_CHIP_ERASE_ISP
 01BC           ;       else if(cmd==CMD_CHIP_ERASE_ISP)
 01BC           ;       {
 01BC           ;               universalComm(msg_buffer[3],msg_buffer[4],msg_buffer[5],msg_buffer[6]); 
 01BC           ;               //Newer AVR's seems to have a busy bit
 01BC           ;               //cant test this because I don't have any of these new chips
 01BC           ;               if(msg_buffer[2]==0)
 01BC           ;               {
 01BC           ;                       msDelay(msg_buffer[1]);
 01BC           ;               }
 01BC           ;               else    //if(msg_buffer[2]==1)
 01BC           ;               {
 01BC           ;                       while(universalComm(0xF0,0x00,0x00,0x00)&1);
 01BC           ;               }               
 01BC           ;               num_bytes = 2;
 01BC           ;               msg_buffer[0] = CMD_CHIP_ERASE_ISP;
 01BC           ;               msg_buffer[1] = STATUS_CMD_OK;                  
 01BC           ;       }
 01BC           ;       //命令CMD_PROGRAM_FLASH_ISP
 01BC           ;       else if(cmd==CMD_PROGRAM_FLASH_ISP)
 01BC           ;       {
 01BC           ;               block_size = ((unsigned int)msg_buffer[1])<<8;
 01BC           ;               block_size |= msg_buffer[2];
 01BC           ;               mode = msg_buffer[3];
 01BC           ;               LED_FLASH2;
 01BC           ;               //如果是字写模式
 01BC           ;               if((mode&1) == 0)
 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           ;                                       polling_address = address&0xFFFF;
 01BC           ;                               }
 01BC           ;                               //If not switch the mode hard waiting
 01BC           ;                               else
 01BC           ;                               {
 01BC           ;                                       mode = (mode&(~0x0E)) | 0x02;
 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           ;                                               //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&0x0E) == 0x08)
 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]);                                 

⌨️ 快捷键说明

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