//------------------------------------------------------- //Function: //Desc : //Input : //Output: //Return: //Others: //Author: //Date : 2011/03/01 //------------------------------------------------------- void system_inital(void) { WaitUs(5); mcu_clk_inital(); mcu_io_inital(); memset(&system, 0, sizeof(SYS_STRUCT)); DISABLE_INTERRUPT; InitSysTimer(); WaitUs(600); // system_read_MTPrecord(); BK2433_RF_Initial(); AudioInit(); if(bUSBMode) usb_ini(); ENABLE_INTERRUPT; #ifdef DEBUG UartOpen(); #endif PowerUp_RF(); }
//read mouse bits 16 to 31 //spec requires a 2.5ms delay between the two 16bits chunks //but the mouse works fine without it. void ReadMouseExtendedData(){ //read the extended bits. Applies only if the mouse is plugged. //if bit 15 of standard word is 1, a mouse is plugged. unsigned int p1ButtonsHi=0,p2ButtonsHi=0; unsigned char i; if(joypad1_status_lo&(1<<15) || joypad2_status_lo&(1<<15)){ //WaitUs(1); for(i=0;i<16;i++){ p1ButtonsHi<<=1; p2ButtonsHi<<=1; //pulse clock pin JOYPAD_OUT_PORT&=~(_BV(JOYPAD_CLOCK_PIN)); Wait200ns(); Wait200ns(); if((JOYPAD_IN_PORT&(1<<JOYPAD_DATA1_PIN))==0) p1ButtonsHi|=1; if((JOYPAD_IN_PORT&(1<<JOYPAD_DATA2_PIN))==0) p2ButtonsHi|=1; JOYPAD_OUT_PORT|=_BV(JOYPAD_CLOCK_PIN); WaitUs(5); } joypad1_status_hi=p1ButtonsHi; joypad2_status_hi=p2ButtonsHi; } }
int LoadTblCmdSet ( const TBLCMDSET * pt, int size){ int l=0; while (l<size) { unsigned int cadr = ((u32)0x800000) | pt[l].adr; unsigned char cdat = pt[l].dat; unsigned char ccmd = pt[l].cmd; unsigned char cvld =(ccmd & TCMD_UNDER_WR); ccmd &= TCMD_MASK; if (cvld) { if (ccmd == TCMD_WRITE) { write_reg8 (cadr, cdat); } else if (ccmd == TCMD_WAREG) { WriteAnalogReg (cadr, cdat); } else if (ccmd == TCMD_WAIT) { WaitUs (pt[l].adr*256 + cdat); } } l++; } return size; }
UINT _APICALL LptDrvGetStatus(void) { BYTE res = 0; if (PortCurrent) { lasterror = ReadWR0(PortList[PortCurrent-1] + 1, &res); if (ExtraDelay) WaitUs(ExtraDelay); } return res; }
UINT _APICALL LptDrvSetData (DWORD lParam1) { if (PortCurrent) { lasterror = WriteWR0(PortList[PortCurrent-1],(BYTE)lParam1); if (ExtraDelay) WaitUs(ExtraDelay); } else { lasterror = ERROR_INVALID_OPERATION; } return (lasterror == ERROR_SUCCESS); }
static BYTE GetAdcKeyIndex(VOID) { BYTE KeyIndex; KeyIndex = -1; #if (defined(FUNC_LED_ADC1_KEY_MULTIPLE_EN) || defined(FUNC_LED_ADC2_KEY_MULTIPLE_EN)) //段码LED屏与ADC复用示例 #if (defined(FUNC_7PIN_SEG_LED_EN) || defined(FUNC_6PIN_SEG_LED_EN)) gLedDispRefreshFlag = FALSE; LedPinGpioInit(); #endif //切回ADC 口 #ifdef FUNC_LED_ADC1_KEY_MULTIPLE_EN baGPIOCtrl[LED_ADC1_KEY_MULTIPLE_PORT_PU] &= ~LED_ADC1_KEY_MULTIPLE_BIT; baGPIOCtrl[LED_ADC1_KEY_MULTIPLE_PORT_PD] |= LED_ADC1_KEY_MULTIPLE_BIT; #endif #ifdef FUNC_LED_ADC2_KEY_MULTIPLE_EN baGPIOCtrl[LED_ADC2_KEY_MULTIPLE_PORT_PU] &= ~LED_ADC2_KEY_MULTIPLE_BIT; baGPIOCtrl[LED_ADC2_KEY_MULTIPLE_PORT_PD] |= LED_ADC2_KEY_MULTIPLE_BIT; #endif WaitUs(40); //复用时确保AD端口稳定 #endif #ifdef ADC_KEY_PORT_CH1 KeyIndex = AdcChannelKeyGet(ADC_KEY_PORT_CH1); #endif #ifdef ADC_KEY_PORT_CH2 if(KeyIndex == -1) { KeyIndex = AdcChannelKeyGet(ADC_KEY_PORT_CH2); if(KeyIndex != -1) { KeyIndex += ADC_KEY_COUNT; } } #endif #if (defined(FUNC_LED_ADC1_KEY_MULTIPLE_EN) || defined(FUNC_LED_ADC2_KEY_MULTIPLE_EN)) #if (defined(FUNC_7PIN_SEG_LED_EN) || defined(FUNC_6PIN_SEG_LED_EN)) gLedDispRefreshFlag = TRUE; #endif #endif #ifdef HEADPHONE_ADC_PORT_CH if(KeyIndex == -1) { KeyIndex = AdcChannelKeyGet(HEADPHONE_ADC_PORT_CH); if(KeyIndex != -1) { KeyIndex += 22; } } #endif return KeyIndex; }
void ReadButtons(){ unsigned int p1ButtonsLo=0,p2ButtonsLo=0; unsigned char i; //latch controllers JOYPAD_OUT_PORT|=_BV(JOYPAD_LATCH_PIN); #if SNES_MOUSE == 1 if(snesMouseEnabled){ WaitUs(1); }else{ Wait200ns(); Wait200ns(); } #else Wait200ns(); Wait200ns(); #endif JOYPAD_OUT_PORT&=~(_BV(JOYPAD_LATCH_PIN)); //read button states for(i=0;i<16;i++){ p1ButtonsLo>>=1; p2ButtonsLo>>=1; #if SNES_MOUSE == 1 if(snesMouseEnabled){ WaitUs(5); }else{ Wait200ns(); Wait200ns(); } #else Wait200ns(); Wait200ns(); #endif //pulse clock pin JOYPAD_OUT_PORT&=~(_BV(JOYPAD_CLOCK_PIN)); if((JOYPAD_IN_PORT&(1<<JOYPAD_DATA1_PIN))==0) p1ButtonsLo|=(1<<15); if((JOYPAD_IN_PORT&(1<<JOYPAD_DATA2_PIN))==0) p2ButtonsLo|=(1<<15); JOYPAD_OUT_PORT|=_BV(JOYPAD_CLOCK_PIN); #if SNES_MOUSE == 1 if(snesMouseEnabled){ WaitUs(5); }else{ Wait200ns(); Wait200ns(); } #else Wait200ns(); Wait200ns(); #endif } #if JOYSTICK==TYPE_SNES joypad1_status_lo=p1ButtonsLo; joypad2_status_lo=p2ButtonsLo; #else joypad1_status_lo=p1ButtonsLo&0xff; joypad2_status_lo=p2ButtonsLo&0xff; #endif if(joypad1_status_lo==(BTN_START+BTN_SELECT+BTN_Y+BTN_B) || joypad2_status_lo==(BTN_START+BTN_SELECT+BTN_Y+BTN_B)){ SoftReset(); } }
/* Delay 100 microseconds (usi.S) */ static void dly_100us (void){ WaitUs(100); }
/* * SystemSetupClock() - Set processor and peripheral clocks * * Clock Frequency Source * CLK_BASE_MX 204 MHz CLKIN_PLL1 * CLK_BASE_SPIFI 102 MHz CLKIN_IDIVE * CLK_BASE_USB0 480 MHz CLKIN_PLL0USB (Disabled) * CLK_BASE_USB1 60 MHz CLKIN_IDIVE (Disabled) * 120 MHz CLKIN_IDIVD (Disabled) * * 12 MHz CLKIN_IDIVB * 12 MHz CLKIN_IDIVC * */ void __section(SectionForBootstrapOperations) SystemSetupClock(void) { #if (CLOCK_SETUP) /* Switch main clock to Internal RC (IRC) while setting up PLL1 */ LPC_CGU->BASE_CLK[CLK_BASE_MX] = (1 << 11) | (CLKIN_IRC << 24); /* Enable the oscillator and wait 100 us */ LPC_CGU->XTAL_OSC_CTRL = 0; WaitUs(100); #if (SPIFI_INIT) /* Setup SPIFI control register and no-opcode mode */ LPC_SPIFI->CTRL = (0x100 << 0) | (1 << 16) | (1 << 29) | (1 << 30); LPC_SPIFI->IDATA = 0xA5; /* Switch IDIVE clock to IRC and connect to SPIFI clock */ LPC_CGU->IDIV_CTRL[CLK_IDIV_E] = ((1 << 11) | (CLKIN_IRC << 24)); LPC_CGU->BASE_CLK[CLK_BASE_SPIFI] = ((1 << 11) | (CLKIN_IDIVE << 24)); #endif /* SPIFI_INIT */ /* Configure PLL1 (MAINPLL) for main clock */ LPC_CGU->PLL1_CTRL |= 1; /* Power down PLL1 */ /* Change PLL1 to 108 Mhz (msel=9, 12 MHz*9=108 MHz) */ // LPC_CGU->PLL1_CTRL = (DIRECT << 7) | (PSEL << 8) | (1 << 11) | ((NSEL-1) << 12) | ((MSEL-1) << 16) | (CLKIN_PLL1 << 24); LPC_CGU->PLL1_CTRL = (1 << 7) | (0 << 8) | (1 << 11) | (0 << 12) | (8 << 16) | (CLKIN_PLL1 << 24); while (!(LPC_CGU->PLL1_STAT & 1)); /* Wait for PLL1 to lock */ WaitUs(100); /* Change PLL1 to 204 Mhz (msel=17, 12 MHz*17=204 MHz) */ LPC_CGU->PLL1_CTRL = (1 << 7) | (0 << 8) | (1 << 11) | (0 << 12) | (16 << 16) | (CLKIN_PLL1 << 24); while (!(LPC_CGU->PLL1_STAT & 1)); /* Wait for PLL1 to lock */ /* Switch main clock to PLL1 */ LPC_CGU->BASE_CLK[CLK_BASE_MX] = (1 << 11) | (CLKIN_PLL1 << 24); /* Switch main clock to PLL1 */ LPC_CGU->BASE_CLK[CLK_BASE_MX] = (1 << 11) | (CLKIN_PLL1 << 24); /* Set USB PLL dividers for 480 MHz */ LPC_CGU->PLL[CGU_USB_PLL].PLL_MDIV = 0x06167FFA; LPC_CGU->PLL[CGU_USB_PLL].PLL_NP_DIV = 0x00302062; LPC_CGU->PLL[CGU_USB_PLL].PLL_CTRL = 0x0000081D | (CLKIN_CRYSTAL << 24); /* Switch USB0 clock to USB PLL */ LPC_CGU->BASE_CLK[CLK_BASE_USB0] = (1 << 0) | (1 << 11) | (CLKIN_PLL0USB << 24); /* Set IDIVE clock to PLL1/2 = 102 MHz */ LPC_CGU->IDIV_CTRL[CLK_IDIV_E] = (1 << 2) | (1 << 11) | (CLKIN_PLL1 << 24); // PLL1/2 /* Set IDIVD clock to ((USBPLL/4) / 2) = 60 MHz and connect to USB1 */ LPC_CGU->IDIV_CTRL[CLK_IDIV_A] = (3 << 2) | (1 << 11) | (CLKIN_PLL0USB << 24); // USBPLL/4 LPC_CGU->IDIV_CTRL[CLK_IDIV_D] = (1 << 2) | (1 << 11) | (CLKIN_IDIVA << 24); // IDIVA/2 LPC_CGU->BASE_CLK[CLK_BASE_USB1] = (1 << 0) | (1 << 11) | (CLKIN_IDIVD << 24); /* Configure remaining integer dividers */ LPC_CGU->IDIV_CTRL[CLK_IDIV_B] = (0 << 2) | (1 << 11) | (CLKIN_IRC << 24); // IRC LPC_CGU->IDIV_CTRL[CLK_IDIV_C] = (1 << 2) | (1 << 11) | (CLKIN_PLL1 << 24); // PLL1/2 LPC_CGU->BASE_CLK[CLK_BASE_UART0] = (1 << 0) | (1 << 11) | (CLKIN_PLL1 << 24); LPC_CGU->BASE_CLK[CLK_BASE_UART1] = (1 << 0) | (1 << 11) | (CLKIN_PLL1 << 24); LPC_CGU->BASE_CLK[CLK_BASE_UART2] = (1 << 0) | (1 << 11) | (CLKIN_PLL1 << 24); #endif /* CLOCK_SETUP */ }
/* tests thrown in. */ int main( void) { struct serial_param sp; struct interrupt_param irq; (void)SetNativeSpeed( 14745uL); /* Desired serial line characteristics 9600,n82 */ sp.baud = 38400uL; sp.length = UART_WORD_LEN_8; sp.parity = UART_PARITY_NONE; sp.stop = UART_STOP_BITS_1; irq.FIQ = 0; irq.pri = (INT_PRIORITY)5; PINSEL0 &= 0x0FFFFu; /* Set pin P0.8-P0.15 to I/O. */ IODIR |= 0xFFFFFF00u; /* Set pin P0.8-P0.32 to output. */ /* Quick toggles to show we got started. */ IOCLR = YELLOW_LED; IOSET = YELLOW_LED; /* 1 */ IOCLR = YELLOW_LED; IOSET = YELLOW_LED; /* 2 */ IOCLR = YELLOW_LED; IOSET = YELLOW_LED; /* 3 */ IOCLR = YELLOW_LED; IOSET = YELLOW_LED; /* 4 */ IOCLR = YELLOW_LED; IOSET = YELLOW_LED; /* 5 */ IOCLR = YELLOW_LED; IOSET = YELLOW_LED; /* 6 */ IOCLR = YELLOW_LED; /* Set up memory access, CPU and bus speeds. */ (void)SetMAM( 3u, MAM_full_enable); (void)VPBControl( VPB_DIV1); (void)SetDesiredSpeed( 60000uL); (void)ioctl( fileno(stdout), INTERRUPT_SETUP, &irq); /* Set up serial port to desired rate. */ (void)ioctl( fileno(stdout), UART_SETUP, &sp); /* Start timer. */ (void)StartClock(); IOSET = YELLOW_LED; (void)iprintf( "Minimum Wait %u\r\n", MinimumAchievableWait()); IOCLR = YELLOW_LED; puts( "flasher.c Hello World\r\n"); /* It's alive !! */ printf( "Test done with printf %d\n", 1234 ); IOSET = YELLOW_LED; /* Another sequence of toggles. This time high and low should */ /* be 1 second each for a 20sec total delay. Should be easily */ /* measureable to confirm timer operation. */ puts( "Starting wait\r\n"); IOCLR = GREEN_LED; WaitUs( 1000000u); IOSET = GREEN_LED; WaitUs( 1000000u); IOCLR = GREEN_LED; WaitUs( 1000000u); IOSET = GREEN_LED; WaitUs( 1000000u); IOCLR = GREEN_LED; WaitUs( 1000000u); IOSET = GREEN_LED; WaitUs( 1000000u); IOCLR = GREEN_LED; WaitUs( 1000000u); IOSET = GREEN_LED; WaitUs( 1000000u); IOCLR = GREEN_LED; WaitUs( 1000000u); IOSET = GREEN_LED; WaitUs( 1000000u); IOCLR = GREEN_LED; WaitUs( 1000000u); IOSET = GREEN_LED; WaitUs( 1000000u); IOCLR = GREEN_LED; WaitUs( 1000000u); IOSET = GREEN_LED; WaitUs( 1000000u); IOCLR = GREEN_LED; WaitUs( 1000000u); IOSET = GREEN_LED; WaitUs( 1000000u); IOCLR = GREEN_LED; WaitUs( 1000000u); IOSET = GREEN_LED; WaitUs( 1000000u); IOCLR = GREEN_LED; WaitUs( 1000000u); IOSET = GREEN_LED; WaitUs( 1000000u); IOCLR = GREEN_LED; WaitUs( 1000000u); IOSET = GREEN_LED; puts( "End wait\r\n"); /* Two possible ways to end, either sit toggling a pin or run */ /* a simple character echo. */ #if 0 PINSEL0 = 0u; IODIR |= 0x100; while( 1) { /*lint !e716*/ IOSET = GREEN_LED; IOCLR = GREEN_LED; } #endif #if 1 while ( 1 ) { int charAvail; (void)ioctl( fileno(stdout), UART_CHAR_WAITING, &charAvail ); if ( charAvail ) { fputc( getchar(), stdout); } } #endif return( 0); /*lint !e527 unreachable */ }
//------------------------------------------------------- //Function: //Desc : //Input : //Output: //Return: //Others: //Author: //Date : 2011/03/01 //------------------------------------------------------- void system_test_mode(void) { BYTE i=0; BYTE channel = 0; BYTE sc_sub_mode = 0; BYTE sc_count = 0; BYTE uTestCHIndex; BYTE uLEDBlinkDuty; BK2401_RETR = 0x00; BK2401_ENAA = 0x00; BK2401_ENRX = 0x00; PowerUp_RF(); SwitchToTxMode(); BK2401_CE = 0X00; BK2401_CE = 0X01; i = 1; uTestCHIndex = TEST_CHANNEL[i]; BK2401_RFCH=RF_TABLE[uTestCHIndex]; channel = RF_TABLE[uTestCHIndex]; RF_SetLowOuput(); // RF_Set_Mode(1); RF_Set_Mode(0); system.work_sub_mode = TEST_SC; uLEDBlinkDuty = 0; if(get_bindkey()) system.Key.bKey.bBindKeyState = 1; while(system.work_mode == SYSTEM_TEST) { if(u10msFlag & bSysCheck) { u10msFlag &= ~bSysCheck; Sys_KeyScan(); if(system.Key.bKey.bBindKeyValid) { system.Key.bKey.bBindKeyValid = 0; i++; if(i>=3) { i=0; } uTestCHIndex = TEST_CHANNEL[i]; BK2401_RFCH=RF_TABLE[uTestCHIndex]; channel = uTestCHIndex; } if(++uLEDBlinkDuty > 99) { uLEDBlinkDuty = 0; LEDToggle(); } switch(system.work_sub_mode) //²âÊÔģʽ { case TEST_SC: //µ¥Ôز¨ break; case TEST_CD: //µ÷ÊÔ £¬FCC²âÊÔ FIFO_data[0] = 0xCC; FIFO_data[1] = 0xCC; FIFO_data[2] = 0xCC; FIFO_data[3] = 0xCC; FIFO_data[4] = 0xCC; FIFO_data[5] = 0xCC; FIFO_data[6] = 0xCC; FIFO_data[7] = 0xCC; FIFO_data[8] = 0xCC; FIFO_data[9] = 0xCC; FIFO_data[10] = 0xCC; FIFO_data[11] = 0xCC; FIFO_data[12] = 0xCC; FIFO_data[13] = 0xCC; FIFO_data[14] = 0xCC; FIFO_data[15] = 0xCC; FIFO_data[16] = 0xCC; FIFO_data[17] = 0xCC; FIFO_data[18] = 0xCC; FIFO_data[19] = 0xCC; FIFO_data[20] = 0xCC; FIFO_data[21] = 0xCC; FIFO_data[22] = 0xCC; FIFO_data[23] = 0xCC; FIFO_data[24] = 0xCC; W_TX_PAYLOAD_NOACK(FIFO_data,25); WaitUs(50); W_TX_PAYLOAD_NOACK(FIFO_data,25); WaitUs(50); W_TX_PAYLOAD_NOACK(FIFO_data,25); WaitUs(50); W_TX_PAYLOAD_NOACK(FIFO_data,25); WaitUs(50); W_TX_PAYLOAD_NOACK(FIFO_data,25); WaitUs(50); break; case TEST_RF_DATA: //·¢ËÍÊý¾Ý FIFO_data[0] = DATATYPE_MOUSE; FIFO_data[1] = 0; FIFO_data[2] = 0; FIFO_data[3] = 2; FIFO_data[4] = 0; W_TX_PAYLOAD_NOACK(FIFO_data,5); WaitUs(50); W_TX_PAYLOAD_NOACK(FIFO_data,5); WaitUs(50); W_TX_PAYLOAD_NOACK(FIFO_data,5); WaitUs(50); W_TX_PAYLOAD_NOACK(FIFO_data,5); WaitUs(50); W_TX_PAYLOAD_NOACK(FIFO_data,5); WaitUs(50); break; default: system.work_sub_mode = TEST_SC; break; } switch(sc_sub_mode) { case 0 : break; case 1 : sc_count++; if(sc_count >= 2) { sc_count = 0; channel++; if(channel >= 82) { channel = 0; } BK2401_RFCH=channel; } break; case 2 : sc_count++; if(sc_count >= 2) { sc_count = 0; if(channel == 0) { channel = 82; }else{ channel--; } BK2401_RFCH=channel; } break; default: break; } } //usb data dispose if(system.usbp0_data.aceept) { system.usbp0_data.aceept = 0; if(COMMAND_TEST == system.usbp0_data.set_report_data[0]) { switch(system.usbp0_data.set_report_data[1]) { case COM_TEST_SC : system.work_sub_mode = TEST_SC; RF_Set_Mode(0); system.usbp0_data.reday_report_flag = 1; break; case COM_TEST_CD: system.work_sub_mode = TEST_CD; RF_Set_Mode(1); system.usbp0_data.reday_report_flag = 1; break; case COM_TEST_DAT: system.work_sub_mode = TEST_RF_DATA; RF_Set_Mode(1); system.usbp0_data.reday_report_flag = 1; break; case COM_TEST_LOW_CH: i=0; uTestCHIndex = TEST_CHANNEL[i]; BK2401_RFCH=RF_TABLE[uTestCHIndex]; channel = uTestCHIndex; system.usbp0_data.reday_report_flag = 1; break; case COM_TEST_MID_CH: i=1; uTestCHIndex = TEST_CHANNEL[i]; BK2401_RFCH=RF_TABLE[uTestCHIndex]; channel = uTestCHIndex; system.usbp0_data.reday_report_flag = 1; break; case COM_TEST_HIG_CH: i=2; uTestCHIndex = TEST_CHANNEL[i]; BK2401_RFCH=RF_TABLE[uTestCHIndex]; channel = uTestCHIndex; system.usbp0_data.reday_report_flag = 1; break; case COM_TEST_SW_HIG: sc_sub_mode = 1; system.usbp0_data.reday_report_flag = 1; break; case COM_TEST_SW_LOW: sc_sub_mode = 2; system.usbp0_data.reday_report_flag = 1; break; case COM_TEST_SW_STOP: sc_sub_mode = 0; system.usbp0_data.reday_report_flag = 1; break; case COM_TEST_POW_5: RF_Set_ouput_power(3); system.usbp0_data.reday_report_flag = 1; break; case COM_TEST_POW_0: RF_Set_ouput_power(2); system.usbp0_data.reday_report_flag = 1; break; case COM_TEST_POW_N5: RF_Set_ouput_power(1); system.usbp0_data.reday_report_flag = 1; break; case COM_TEST_POW_N10: RF_Set_ouput_power(0); system.usbp0_data.reday_report_flag = 1; break; case COM_TEST_EXIT: system.work_mode = SYSTEM_WORK; system.usbp0_data.reday_report_flag = 1; break; default : system.usbp0_data.reday_report_flag = 0; break; } } else if(COMMAND_CURRENT_MODE == system.usbp0_data.set_report_data[0]) { system.usbp0_data.get_report_data[1] = COMMAND_TEST; system.usbp0_data.reday_report_flag = 1; } } } BK2433_RF_Initial(); SwitchToRxMode(); PowerUp_RF(); }