You are on page 1of 6

/******************************************************************* Copyright (c) 2007 Freescale Semiconductor \file Main.

c \brief USB example for MC9S08JM60 \author Freescale Semiconductor \author Freescale Mexico \version 1.0 \date 29/April/2008 *********************************************************************/ /* Include Files */ #include <hidef.h> #include "derivative.h" #include "Usb_Drv.h" #include "Usb_Config.h" #include "FSLTypes_File.h" #include "MCU.h" #include "GPIO.h" #include "USB_User_API.h" #include "ADC.h" #include "KBI.h" /* /* /* /* /* /* /* /* /* /* for EnableInterrupts macro */ include peripheral declarations */ USB Main Driver */ USB Configuration header */ FSL Standar Definitions */ MCU Initialization */ GPIO Initialization */ USB API for USB Module */ ADC Initialization */ KBI Initialization */

//*********************************************************************** ******** const byte NVOPT_INIT @0x0000FFBF = 0x02; unsecure const byte NVPROT_INIT @0x0000FFBD = 0xFA; protected // vector redirect, flash // 0xFC00-0xFFFF are

//****** (variable y vonstantes)************************************************ extern void _Startup(void); void Init_Sys(void); unsigned long retardo=0; //parametro para hacer retardo char PTED_Config=0; //byte de inicializacion del registro PTAD char PTEDD_Config=0; //byte de inicializacion del registro PTADD char PTEPE_Config=0; //byte de inicializacion del registro PTAPE char PTESE_Config=0; //byte de inicializacion del registro PTASE char PTEDS_Config=0; //byte de inicializacion del registro PTADS int cnt=0; int b=1; /*************** Macros y definiciones *********************************/ #define Disable_COP() SOPT1 &= 0x20 //deshabilita el COP /**************Declaracion de funciones *******************************/ void titilando(void); void apagarled(void); void Delay(unsigned long retardo); //funcion para hacer reatrdos varios void PTE_Init(char PTED_Config,char PTEDD_Config,char PTEPE_Config,char PTESE_Config,char PTEDS_Config);

//FUNCION PRINCIPAL*******************// void main(void){ Init_Sys(); //Inicializaciones del sistema y reloj /* Initialize USB Module */

Initialize_USBModule();

EnableInterrupts; Disable_COP();//deshabilita el COP PTE_Init(0x00,0xFF,0x00,0xFF,0x00); //pines inician en "0",pines como salida, no pullups, for(;;){ /* USB Manager, please keep it in main Loop */ Check_USBBus_Status(); if(ButtonPressed) { EP2_Buffer[0] = SWITCHES_PORT; EndPoint_IN(EP2,8); ButtonPressed = 0; KBI_ENABLE(); } switch(EP1_Buffer[0]){ case 0: PTED=0x00; break; case 1: PTED=0x01; break; case 2: PTED=0x02; break; case 3: PTED=0x03; break; case 4: PTED=0x04; break; case 5: PTED=0x05; break; case 6: PTED=0x06; break;

case 7: PTED=0x07; break; }

/* if((EP1_Buffer[0]==1)&&(b==1)) { cnt++; b=0; }

if(cnt>7){ cnt=0; } switch(cnt){ case 0: PTED=0x00; break; case 1: PTED=0x01; break; case 2: PTED=0x02; break; case 3: PTED=0x03; break; case 4: PTED=0x04; break; case 5: PTED=0x05; break; case 6: PTED=0x06; break; case 7: PTED=0x07; break; }

Delay(5000); b=1; */ } }

void PTE_Init(char PTED_Config,char PTEDD_Config,char PTEPE_Config,char PTESE_Config,char PTEDS_Config){ PTED=PTED_Config; //inicialice estado pines PTB PTEDD=PTEDD_Config; //inicialice direccion de pines PTB PTEPE=PTEPE_Config; //inicialice estado de pullups PTB PTESE=PTESE_Config; //inicialice estado del slew rate PTB PTEDS=PTEDS_Config; //inicialice estado de drive strength PTB } /* Funcion Delay(): Retarda basado en una variable tipo entero */ void Delay(unsigned long retardo){ while(retardo>0){ //llego a cero? retardo--; //no --> decrementa } } //funcion para la secuencia1 void titilando(void) { PTED=0x01; Delay(8000); PTED=0x00; Delay(8000); } void apagarled(void) { PTED=0x00; } //************* ( FUNCIONES ) ********************************** void Init_Sys(void) { Mcu_Init(); /* MCU general Initialization */ MCG_Init(); /* Initialize the MCG module to generate 24MHz bus clock */ }

//************* ( FUNCIONES DE INTERUPCINES ) ********************************** /*Dummy ISR */ interrupt void Dummy_ISR(void) { }

void (* volatile const _UserEntry[])()@0xFABC={ 0x9DCC, // asm NOP(9D), asm JMP(CC) _Startup }; extern interrupt void USB_ISR(void); // redirect vector 0xFFC0-0xFFFD to 0xFBC0-0xFBFD void (* volatile const _Usr_Vector[])()@0xFBC4= { Dummy_ISR, // Int.no.29 RTC Dummy_ISR, // Int.no.28 IIC Dummy_ISR, // Int.no.27 ACMP Dummy_ISR, // Int.no.26 ADC FFCA) Dummy_ISR, // Int.no.25 KBI FFCC) Dummy_ISR, // Int.no.24 SCI2 Transmit Dummy_ISR, // Int.no.23 SCI2 Receive Dummy_ISR, // Int.no.22 SCI2 Error Dummy_ISR, // Int.no.21 SCI1 Transmit Dummy_ISR, // Int.no.20 SCI1 Receive Dummy_ISR, // Int.no.19 SCI1 error Dummy_ISR, // Int.no.18 TPM2 Overflow Dummy_ISR, // Int.no.17 TPM2 CH1 Dummy_ISR, // Int.no.16 TPM2 CH0 Dummy_ISR, // Int.no.15 TPM1 Overflow Dummy_ISR, // Int.no.14 TPM1 CH5 Dummy_ISR, // Int.no.13 TPM1 CH4 Dummy_ISR, // Int.no.12 TPM1 CH3 Dummy_ISR, // Int.no.11 TPM1 CH2 Dummy_ISR, // Int.no.10 TPM1 CH1 Dummy_ISR, // Int.no.9 TPM1 CH0 Dummy_ISR, // Int.no.8 Reserved USB_ISR, // Int.no.7 USB Statue Dummy_ISR, // Int.no.6 SPI2 Dummy_ISR, // Int.no.5 SPI1 Dummy_ISR, // Int.no.4 Loss of lock Dummy_ISR, // Int.no.3 LVI Dummy_ISR, // Int.no.2 IRQ FFFA) Dummy_ISR, // Int.no.1 SWI };

(at FBC4) (at FFC4) (at FBC6) (at FFC6) (at FBC8) (at FFC8) (at FBCA) (at (at FBCC) (at (at FBCE) (at FFCE) (at FBD0) (at FFD0) (at FBD2) (at FFD2) (at FBD4) (at FFD4) (at FBD6) (at FFD6) (at FBD8) (at FFD8) (at FBDA) (at FFDA) (at FBDC) (at FFDC) (at FBDE) (at FFDE) (at FBE0) (at FFE0) (at FBE2) (at FFE2) (at FBE4) (at FFE4) (at FBE6) (at FFE6) (at FBE8) (at FFE8) (at FBEA) (at FFEA) (at FBEC) (at FFEC) (at FBEE) (at FFEE) (at FBF0) (at FFF0) (at FBF2) (at FFF2) (at FBF4) (at FFF4) (at FBF6) (at FFF6) (at FBF8) (at FFF8) (at FBFA) (at (at FBFC) (at FFFC)

#pragma CODE_SEG Bootloader_ROM void Bootloader_Main(void); void _Entry(void) { PTGD = 0x00; PTGDD = 0xF0; PTGPE = 0x0F;

//PTG0-3 used for KBI input //Pull-up enable

// MCG clock initialization, fBus=24MHz MCGC2 = 0x36;

//MCGC2_EREFS=0; while(!(MCGSC & 0x02)); MCGC1 = 0x1B; MCGC3 = 0x48; while ((MCGSC & 0x48) != 0x48); // Flash clock FCDIV=0x4E; should be 150-200kHz clock=fbus/8/(DIV[5:0]+1)

//wait for the OSC stable //wait for the PLL is locked

// PRDIV8=1; DIV[5:0]=14, flash clock // bus clock=24M, flash // bus clock=24M, flash

clock=fbus/8/(DIV[5:0]+1) if(!PTGD_PTGD0) { SOPT1 = 0x20; is requested // PTG0 is pressed USBCTL0=0x44; USBCTL0_USBVREN=1; Bootloader_Main(); } else asm JMP _UserEntry; } #pragma CODE_SEG default

// disable COP only if bootloader mod

// Bootloader mode // Enter User mode

You might also like