//*-------------------------------------------------------------------------------------- //* Function Name : Main //* Object : Software entry point //* Input Parameters : none. //* Output Parameters : none. //*-------------------------------------------------------------------------------------- int main(void) { char data[MSG_SIZE]; unsigned int length; int stepCnt = 0; unsigned char str[10]; /**** System init ****/ //InitFrec(); Init_CP_WP(); //chek for CP and WP //CP - card present while(((AT91C_BASE_PIOA->PIO_PDSR) & BIT15)) { /*put your card present event here*/ } //WP - write protect //while(((AT91C_BASE_PIOA->PIO_PDSR) & BIT16)) { /*put your write protect event here*/ } if (initMMC() == MMC_SUCCESS) { //card_state |= 1; memset(&mmc_buffer,0,512); mmcReadRegister (10, 16); mmc_buffer[7]=0; } flashInit(); Init_PWM(); // Enable User Reset and set its minimal assertion to 960 us AT91C_BASE_RSTC->RSTC_RMR = AT91C_RSTC_URSTEN | (0x4<<8) | (unsigned int)(0xA5<<24); // Led init // First, enable the clock of the PIOB AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ) ; //* to be outputs. No need to set these pins to be driven by the PIO because it is GPIO pins only. AT91F_PIO_CfgOutput( AT91C_BASE_PIOA, OUTPUT_MASK ); //* Clear the LED's. /* AT91F_PIO_SetOutput( AT91C_BASE_PIOA, OUTPUT_MASK ); AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, OUTPUT_MASK ); */ // Init USB device AT91F_USB_Open(); AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, OUTPUT_MASK ); // Init USB device // Wait for the end of enumeration setForce(40000); int pCDCEnablingCounter = 0; while (!pCDC.IsConfigured(&pCDC) && pCDCEnablingCounter < 2500000){ pCDCEnablingCounter++; }; if (pCDCEnablingCounter < 2500000) { CDC = 1; } setForce(0); // Set Usart in interrupt //Usart_init(); //Read and set settings memcpy(settings, OUR_FLASH_ADDR, 128); int i;memset(&mmc_buffer, 0x00, 512); int j; char *settingsBlocks[50]; char settingsDelim[] = "~"; char *settingsParts = strtok( settings, settingsDelim ); i = 0; while( settingsParts != NULL ) { settingsBlocks[i++] = settingsParts; settingsParts = strtok( NULL, settingsDelim ); } for (j = 0; j < i; j++) { parseSettings(settingsBlocks[j]); } InitADC(); Init_PWM(); AT91F_PIO_CfgInput(AT91C_BASE_PIOA, SW1_MASK); AT91F_PIO_CfgInput(AT91C_BASE_PIOA, SW2_MASK); AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED_GREEN); AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED_YELLOW); setForce(0); //startBlinking(250000); /**** MMC CARD ****/ init_extint(); while (1) { cnt++; if (cnt > 50000) { cnt = 0; printTrace("COUNTER RESET\n"); } } }
//*-------------------------------------------------------------------------------------- //* Function Name : main //* Object : //*-------------------------------------------------------------------------------------- int main ( void ) { // char button = 0; // int x = 0, y = 0, j = 0; // int adc; // int i = 0; int x,y,z,i; button_flag = 0; //Init trace DBGU //AT91F_DBGU_Init(); //AT91F_DBGU_Printk("\n\r-I- BasicUSB 1.1 (USB_DP_PUP) \n\r0) Set Pull-UP 1) Clear Pull UP\n\r"); //Enable RESET m_pRSTC->RSTC_RCR = 0xA5000008; m_pRSTC->RSTC_RMR = 0xA5000001; Delay(1000); // Init USB device AT91F_USB_Open(); // Configure the RTT: *AT91C_RTTC_RTMR = BUTTON_SAMPLING; // Set in PIO mode and Configure in Input AT91F_PIOA_CfgPMC(); // AT91F_PIO_CfgInput(AT91C_BASE_PIOA, (SW1|SW2)); // Wait for the end of enumeration // while (!HID.IsConfigured(&HID)); // InitMAM InitMMA(); // InitADC ADCInit(); // UART0 Init InitUSART0(); // Stat led s_pPio->PIO_PER = BIT31; // Configure PA31 as output s_pPio->PIO_OER = BIT31; // Set PA31 to HIGH s_pPio->PIO_SODR = BIT31; // Test flash if(TestFlash()) { for(i=0; i<20; i++) { s_pPio->PIO_CODR = BIT31; Delay(150000); s_pPio->PIO_SODR = BIT31; Delay(150000); } } // Button // Configure P20 as input s_pPio->PIO_ODR = BIT20; // Enable s_pPio->PIO_PER = BIT20; Delay(1000); // CALIBRATE WHEN BUTT IS PRESS // while((s_pPio->PIO_PDSR&BIT20)==BIT20); Delay(1000); // Get coordinates GetCoordinates(); base_y = Coordinates[0]/NSAMPLE; base_x = Coordinates[1]/NSAMPLE; base_z = Coordinates[2]/NSAMPLE; // Start waiting some cmd while (1) { // Check enumeration if (HID.IsConfigured(&HID)) { // check button status if((s_pPio->PIO_PDSR&BIT20)==0) { // Set PA31 to LOW s_pPio->PIO_CODR = BIT31; // set button flag button_flag = 0x01; Delay(1000); } else { // Set PA31 to HIGH // s_pPio->PIO_SODR = BIT31; // clear button flag button_flag = 0x00; } GetCoordinates(); Delay(10000); //* if((j++)==100) { //* //* print_view = PRINT_COORDINATES; //* write_report_USART0(); //* //* // print_view = PRINT_DIVERSION; //* // write_report_USART0(); //* //* j=0; //* } y = 478 - Coordinates[0]/NSAMPLE; // y = base_y - Coordinates[0]/NSAMPLE; if(y>40) { if(y<50) HID.SendReport(&HID, button_flag, 0, -1); else if (y<100) HID.SendReport(&HID, button_flag, 0, -2); else if (y<150) HID.SendReport(&HID, button_flag, 0, -3); else if (y<200) HID.SendReport(&HID, button_flag, 0, -6); else HID.SendReport(&HID, button_flag, 0, -16); } else if(y<-40){ if(y>-50) HID.SendReport(&HID, button_flag, 0, 1); else if (y>-100) HID.SendReport(&HID, button_flag, 0, 2); else if (y>-150) HID.SendReport(&HID, button_flag, 0, 3); else if (y>-200) HID.SendReport(&HID, button_flag, 0, 6); else HID.SendReport(&HID, button_flag, 0, 16); } x = 565 - Coordinates[1]/NSAMPLE; // x = base_x - Coordinates[1]/NSAMPLE; if(x>40) { if(x<50) HID.SendReport(&HID, button_flag, -1, 0); else if (x<100) HID.SendReport(&HID, button_flag, -2, 0); else if (x<150) HID.SendReport(&HID, button_flag, -3, 0); else if (x<200) HID.SendReport(&HID, button_flag, -6, 0); else HID.SendReport(&HID, button_flag, -16, 0); } else if(x<-40){ if(x>-50) HID.SendReport(&HID, button_flag, 1, 0); else if (x>-100) HID.SendReport(&HID, button_flag, 2, 0); else if (x>-150) HID.SendReport(&HID, button_flag, 3, 0); else if (x>-200) HID.SendReport(&HID, button_flag, 6, 0); else HID.SendReport(&HID, button_flag, 16, 0); } // just test Z coordinate z = Coordinates[2]/NSAMPLE; if(z<300) { s_pPio->PIO_CODR = BIT31; } else { s_pPio->PIO_SODR = BIT31; } Delay(20); //* x = ((150) - GetADC4())/20; //* HID.SendReport(&HID, button, x, 0); //* Delay(50); //* HID.SendReport(&HID, button, ((base_y) - GetADC5())/50, 0); //* Delay(50); //* HID.SendReport(&HID, button, ((base_z) - GetADC6())/50, 0); //* Delay(50); //* //* button = 0; //* //* for(j=0; j<100; j++) { //* HID.SendReport(&HID, button, 1, 0); //* Delay(50); //* } //* //* for(j=0; j<100; j++) { //* HID.SendReport(&HID, button, 0, 1); //* Delay(50); //* } //* //* for(j=0; j<100; j++) { //* HID.SendReport(&HID, button, -1, 0); //* Delay(50); //* } //* //* for(j=0; j<100; j++) { //* HID.SendReport(&HID, button, 0, -1); //* Delay(50); //* } } } }