//начало основной программы void main(void) { CPUinit(); //инициализация системы timer_init(); //инициализация таймеров-счетчиков LCDinit_clear(); //нач инициализация и сброс ЖКИ InitUSART0(115200); //инициализация USART0 со скоростью обмена 115200 кбит/с // Вывод на ЖКИ начальной заставки lcd_pro_data('U', 0); lcd_tek_data('S'); lcd_tek_data('A'); lcd_tek_data('R'); lcd_tek_data('T'); lcd_tek_data('_'); lcd_tek_data('F'); lcd_tek_data('L'); lcd_tek_data('A'); lcd_tek_data('S'); lcd_tek_data('H'); //начало основного цикла for (;;) { if (flagn_kn1==1) // нажималась ли кнопка 1 { flagn_kn1=0; //да, сбросить флаг нажатия //смена состояния выхода светодиода LED1 if (led1_old_state==OFF) { AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED1); // зажечь сетодиод 1 led1_old_state=ON; } else { AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED1); // погасить светодиод 1 led1_old_state=OFF; } //выбор значения для передачи в USART ch0++; if (ch0 == 'z') ch0 = '!'; lcd_pro_data(ch0, 64); //индикация символа, подлежащего передаче } if (flagn_kn2==1) // нажималась ли кнопка 2 { flagn_kn2=0; //да, сбросить флаг нажатия //смена состояния выхода светодиода LED2 if (led2_old_state==OFF) { AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED2); // зажечь сетодиод 2 led2_old_state=ON; } else { AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED2); // погасить светодиод 2 led2_old_state=OFF; } write_char_USART0(ch0); //передача символа через USART0 lcd_pro_data(ch0, 66); //индикация переданного символа } if (flagn_kn3==1) // нажималась ли кнопка 3 { flagn_kn3=0; //да, сбросить флаг нажатия //смена состояния выхода светодиода LED3 if (led3_old_state==OFF) { AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED3); // зажечь сетодиод 3 led3_old_state=ON; } else { AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED3); // погасить светодиод 3 led3_old_state=OFF; } write_str_USART0(stroka); //передача в USART0 строки данных //индикация переданной строки U8 i = 0x0; while(stroka[i] != '\0') { lcd_pro_data(stroka[i], 68+i); //индикация переданного символа строки i++; } } if (flagn_kn4==1) // нажималась ли кнопка 4 { flagn_kn4=0; //да, сбросить флаг нажатия //смена состояния выхода светодиода LED4 if (led4_old_state==OFF) { AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED4); // зажечь сетодиод 4 led4_old_state=ON; } else { AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED4); // погасить светодиод 4 led4_old_state=OFF; } lcd_clear(); //очистка ЖКИ } } }
int main(void) { unsigned char bmButtons = 0; TRACE_CONFIGURE(DBGU_STANDARD, 115200, BOARD_MCK); printf("-- USB Device HID Mouse Project %s --\n\r", SOFTPACK_VERSION); printf("-- %s\n\r", BOARD_NAME); printf("-- Compiled: %s %s --\n\r", __DATE__, __TIME__); // SPP + int i; button_flag = 0; //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(); // 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); // SPP - // If they are present, configure Vbus & Wake-up pins PIO_InitializeInterrupts(0); WAKEUP_CONFIGURE(); // If there is on board power, switch it off #ifdef PIN_USB_POWER_ENB { const Pin pinUsbPwr = PIN_USB_POWER_ENB; PIO_Configure(&pinUsbPwr, 1); } #endif // Initialize key statuses and configure push buttons #if defined(at91cap9dk) const Pin pinRow0 = PIN_KEYBOARD_ROW0; PIO_Configure(&pinRow0, 1); #endif PIO_Configure(pinsJoystick, PIO_LISTSIZE(pinsJoystick)); // HID driver initialization HIDDMouseDriver_Initialize(); // connect if needed VBUS_CONFIGURE(); // Infinite loop while (1) { // SPP + #define TIMEOUT 100 static int Timeout = TIMEOUT; GetCoordinates(); base_y = Coordinates[0]/NSAMPLE; base_x = Coordinates[1]/NSAMPLE; base_z = Coordinates[2]/NSAMPLE; // SPP - if( USBState == STATE_SUSPEND ) { TRACE_DEBUG("suspend !\n\r"); USBState = STATE_IDLE; LowPowerMode(); } if( USBState == STATE_RESUME ) { // Return in normal MODE NormalPowerMode(); USBState = STATE_IDLE; TRACE_DEBUG("resume !\n\r"); } if (USBD_GetState() < USBD_STATE_CONFIGURED) continue; if (!Timeout) { unsigned char status; do { status = HIDDMouseDriver_ChangePoints(bmButtons, base_x, base_y); } while (status != USBD_STATUS_SUCCESS); Timeout = TIMEOUT; } else Timeout--; } }
//*-------------------------------------------------------------------------------------- //* 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); //* } } } }