📄 freescale
字号:
#include <hidef.h>
#include "derivative.h"
#include "FslTypes.h"
#include "USB_Handle.h"
#include "SPI.h"
#include "SD.h"
#include "SCSI.h"
/* extern Variables */
extern byte vCBWBuf_flag;
/************************************************************************************/
void main(void)
{
SOPT2 = 0x00;
_SD_DE = 0; // Card detection
_SD_WR = 0; // write portect
while(SD_DE == kSD_Desert); // SD Card inserted
SCSI_Init(); // Mass Storage Device Initialization
EnableInterrupts;
for(;;)
{
if(vCBWBuf_flag==1)
{
SCSI_Process(); // SCSI Process
vCBWBuf_flag=0;
}
}
}
/****************************************************************
*****************************************************************
** Below are Bootloader function code **
*****************************************************************
****************************************************************/
const byte NVOPT_INIT @0x0000FFBF = 0x02; // vector redirect, flash unsecure
const byte NVPROT_INIT @0x0000FFBD = 0xFA; // 0xFC00-0xFFFF are protected
extern void _Startup(void);
extern interrupt void USB_ISR(void);
interrupt void Dummy_ISR(void) {
asm nop;
}
void (* volatile const _UserEntry[])()@0xFBBC={
0x9DCC, // asm NOP(9D), asm JMP(CC)
_Startup
};
// redirect vector 0xFFC0-0xFFFD to 0xFBC0-0xFBFD
void (* volatile const _Usr_Vector[])()@0xFBC4= {
Dummy_ISR, // Int.no.29 RTC (at FFC4)
Dummy_ISR, // Int.no.28 IIC (at FFC6)
Dummy_ISR, // Int.no.27 ACMP (at FFC8)
Dummy_ISR, // Int.no.26 ADC (at FFCA)
Dummy_ISR, // Int.no.25 KBI (at FFCC)
Dummy_ISR, // Int.no.24 SCI2 Transmit (at FFCE)
Dummy_ISR, // Int.no.23 SCI2 Receive (at FFD0)
Dummy_ISR, // Int.no.22 SCI2 Error (at FFD2)
Dummy_ISR, // Int.no.21 SCI1 Transmit (at FFD4)
Dummy_ISR, // Int.no.20 SCI1 Receive (at FFD6)
Dummy_ISR, // Int.no.19 SCI1 error (at FFD8)
Dummy_ISR, // Int.no.18 TPM2 Overflow (at FFDA)
Dummy_ISR, // Int.no.17 TPM2 CH1 (at FFDC)
Dummy_ISR, // Int.no.16 TPM2 CH0 (at FFDE)
Dummy_ISR, // Int.no.15 TPM1 Overflow (at FFE0)
Dummy_ISR, // Int.no.14 TPM1 CH5 (at FFE2)
Dummy_ISR, // Int.no.13 TPM1 CH4 (at FFE4)
Dummy_ISR, // Int.no.12 TPM1 CH3 (at FFE6)
Dummy_ISR, // Int.no.11 TPM1 CH2 (at FFE8)
Dummy_ISR, // Int.no.10 TPM1 CH1 (at FFEA)
Dummy_ISR, // Int.no.9 TPM1 CH0 (at FFEC)
Dummy_ISR, // Int.no.8 Reserved (at FFEE)
USB_ISR, // Int.no.7 USB Statue (at FFF0)
Dummy_ISR, // Int.no.6 SPI2 (at FFF2)
Dummy_ISR, // Int.no.5 SPI1 (at FFF4)
Dummy_ISR, // Int.no.4 Loss of lock (at FFF6)
Dummy_ISR, // Int.no.3 LVI (at FFF8)
Dummy_ISR, // Int.no.2 IRQ (at FFFA)
Dummy_ISR, // Int.no.1 SWI (at FFFC)
};
#pragma CODE_SEG Bootloader_ROM
void Bootloader_Main(void);
void _Entry(void)
{
SOPT1 = 0x13; // disable COP
PTGDD_PTGDD0 = 0; // PTG0 is input
PTGPE_PTGPE0 = 1; // internal pullup for PTG0
MCGC2 = 0x36;
while(!(MCGSC & 0x02)); //wait for the OSC stable
MCGC1 = 0x98;
while((MCGSC & 0x1C ) != 0x08); // external clock is selected
MCGC3 = 0x48;
while ((MCGSC & 0x48) != 0x48); //wait for the PLL is locked
MCGC1 = 0x18;
while((MCGSC & 0x6C) != 0x6C);
// Mode selection
if(PTGD_PTGD0) {
asm JMP _UserEntry; // Enter User Mode
}
// Enter Bootloader Mode
else {
USBCTL0=0x44;
//USBCTL0=0x00; // external Reg & pullup and PHY enable
Bootloader_Main(); // Enter bootloader code
}
} // _Entry end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -