int main (void) { /** * Inicializando o clock do uP */ sysclk_init(); /** * Desabilitando o WathDog do uP */ WDT->WDT_MR = WDT_MR_WDDIS; // 29.17.4 PMC Peripheral Clock Enable Register 0 // 1: Enables the corresponding peripheral clock. // ID_PIOA = 11 - TAB 11-1 //PMC->PMC_PCER0 |= (1<<ID_PIOA) | (1<<ID_PIOB); _pmc_enable_clock_periferico(ID_PIOA); _pmc_enable_clock_periferico(ID_PIOB); //PMC->PMC_PCER0 |= ID_PIOC; //31.6.1 PIO Enable Register // 1: Enables the PIO to control the corresponding pin (disables peripheral control of the pin). //PIOA->PIO_PER = (1 << PIN_LED_BLUE ); //PIOB->PIO_PER = (1 << PIN_PUSHBUTTON_2 ); //PIOA->PIO_PER |= (1 << PIN_LED_GREEN ); //PIOC->PIO_PER |= (1 << PIN_LED_RED ); // 31.6.46 PIO Write Protection Mode Register // 0: Disables the write protection if WPKEY corresponds to 0x50494F (PIO in ASCII). //PIOA->PIO_WPMR = 0; //PIOB->PIO_WPMR = 0; //PIOB->PIO_ODR = (1 << PIN_PUSHBUTTON_2 ); //PIOB->PIO_PUER = (1 << PIN_PUSHBUTTON_2 ); // 31.6.4 PIO Output Enable Register // 1: Enables the output on the I/O line. //PIOA->PIO_OER |= (1 << PIN_LED_BLUE ); //PIOA->PIO_OER |= (1 << PIN_LED_GREEN ); //PIOC->PIO_OER |= (1 << PIN_LED_RED ); // 31.6.10 PIO Set Output Data Register // 1: Sets the data to be driven on the I/O line. _pio_set_output(PIOA,(1 << PIN_LED_BLUE ), 1, 0); _pio_set_input(PIOB, 1<<PIN_PUSHBUTTON_2,1); /** * Loop infinito */ while(1){ /* * Utilize a função delay_ms para fazer o led piscar na frequência * escolhida por você. */ if(((PIOB->PIO_PDSR >> PIN_PUSHBUTTON_2) & 1) == 1) { _pio_set(PIOA,1<<PIN_LED_BLUE); //PIOA->PIO_SODR = (1 << PIN_LED_BLUE ); } else { _pio_clear(PIOA,1<<PIN_LED_BLUE); //PIOA->PIO_CODR = (1 << PIN_LED_BLUE ); } }
int main (void) { /** * Inicializando o clock do uP */ sysclk_init(); /** * Desabilitando o WathDog do uP */ WDT->WDT_MR = WDT_MR_WDDIS; /** * Ativa clock nos periféricos */ _pmc_enable_clock_periferico(ID_LED_BLUE); _pmc_enable_clock_periferico(ID_LED_GREEN); // Redundante mas não tem problema ! _pmc_enable_clock_periferico(ID_LED_RED); _pmc_enable_clock_periferico(ID_BUT_2); /** * Configura saída */ pio_set_output(PORT_LED_BLUE , MASK_LED_BLUE ,1,0,0); pio_set_output(PORT_LED_GREEN , MASK_LED_GREEN ,1,0,0); pio_set_output(PORT_LED_RED , MASK_LED_RED ,1,0,0); /** * Configura entrada */ pio_set_input(PORT_BUT_2, MASK_BUT_2, PIO_PULLUP | PIO_DEBOUNCE); /* * Configura divisor do clock para debounce */ pio_set_debounce_filter(PORT_BUT_2, MASK_BUT_2, 100); /* * Configura interrupção para acontecer em borda de descida. */ pio_handler_set(PIOB, ID_BUT_2, MASK_BUT_2, PIO_IT_FALL_EDGE, push_button_handle); /* * Ativa interrupção no periférico B porta do botão */ pio_enable_interrupt(PORT_BUT_2, MASK_BUT_2); /* * Configura a prioridade da interrupção no pORTB */ NVIC_SetPriority((IRQn_Type)PIOB_IRQn, 0); /* * Ativa interrupção no port B */ NVIC_EnableIRQ((IRQn_Type)PIOB_IRQn); /** * Loop infinito */ while(1){ /* pio_set(PIOA, (1 << PIN_LED_BLUE)); delay_ms(500); pio_clear(PIOA, (1 << PIN_LED_BLUE)); delay_ms(500); */ } }
int main (void) { /** * Inicializando o clock do uP */ sysclk_init(); /** * Desabilitando o WathDog do uP */ WDT->WDT_MR = WDT_MR_WDDIS; // 29.17.4 PMC Peripheral Clock Enable Register 0 // 1: Enables the corresponding peripheral clock. // ID_PIOA = 11 - TAB 11-1 _pmc_enable_clock_periferico(ID_PIOA); _pmc_enable_clock_periferico(ID_PIOB); _pmc_enable_clock_periferico(ID_PIOC); _pio_set_output(PIOC, (1 << PIN_LED_RED),1,0); // 31.6.46 PIO Write Protection Mode Register // 0: Disables the write protection if WPKEY corresponds to 0x50494F (PIO in ASCII). PIOA->PIO_WPMR = 0; // PIOC->PIO_WPMR = 0; PIOB->PIO_WPMR = 0; //31.6.1 PIO Enable Register // 1: Enables the PIO to control the corresponding pin (disables peripheral control of the pin). PIOA->PIO_PER = (1 << PIN_LED_BLUE ); PIOA->PIO_PER = (1 << PIN_LED_GREEN ); // PIOC->PIO_PER = (1 << PIN_LED_RED ); PIOB->PIO_PER = (1 << PIN_PUSHBUTTON_1); // 31.5.6: PIO disable buffer // Enables the input on the I/O line. PIOB->PIO_ODR = (1 << PIN_PUSHBUTTON_1); //31.5.6: Pull up enable //PIOB->PIO_PUER = (1 << PIN_PUSHBUTTON_1); _pio_pull_up(PIOB, (1 << PIN_PUSHBUTTON_1), 1); //PIOB->PIO_IFDR = (1 << PIN_PUSHBUTTON_1); PIOB->PIO_IFSCER = (1 << PIN_PUSHBUTTON_1); // 31.6.4 PIO Output Enable Register // 1: Enables the output on the I/O line. PIOA->PIO_OER = (1 << PIN_LED_BLUE ); PIOA->PIO_OER = (1 << PIN_LED_GREEN ); // PIOC->PIO_OER = (1 << PIN_LED_RED ); // 31.6.10 PIO Set Output Data Register // 1: Sets the data to be driven on the I/O line. /* Biblioteca dos LED's //Manual do SAM4S-EK2 sessão 4.3.15 *Para acender os LED's verde(PA19) e azul(PA20), é necessário um baixo nivel. *Para acender o LED vermelho(PC20), é necessário um alto nível //Apagar os LED's PIOA->PIO_SODR = (1 << PIN_LED_BLUE ); PIOA->PIO_SODR = (1 << PIN_LED_GREEN ); PIOC->PIO_CODR = (1 << PIN_LED_RED ); //Acender os LED's PIOA->PIO_CODR = (1 << PIN_LED_BLUE ); PIOA->PIO_CODR = (1 << PIN_LED_GREEN ); PIOC->PIO_SODR = (1 << PIN_LED_RED ); */ /** * Loop infinito */ while(1){ /* WHile para verificar se o botão USRPB1 foi pressionado */ // if ( ((PIOB->PIO_PDSR >> PIN_PUSHBUTTON_1) & 1) == 0){ if (_pio_get_output_data_status(PIOB,1 << PIN_PUSHBUTTON_1 ) == BOTAO_1_APERTADO){ _pio_clear(PIOA, MASK_LED_BLUE); _pio_set(PIOC, 1 << PIN_LED_RED ); delay_ms(200); } else { _pio_set(PIOA, MASK_LED_BLUE); _pio_clear(PIOC,1 << PIN_LED_RED); delay_ms(200); } /* * Utilize a função delay_ms para fazer o led piscar na frequência * escolhida por você. */ //delay_ms(); //LED's dançando /* for(int i = 0; i<4;i++){ PIOC->PIO_SODR = (1 << PIN_LED_RED ); PIOA->PIO_SODR = (1 << PIN_LED_BLUE ); PIOA->PIO_SODR = (1 << PIN_LED_GREEN ); delay_ms(TEMPO); PIOC->PIO_CODR = (1 << PIN_LED_RED ); PIOA->PIO_CODR = (1 << PIN_LED_BLUE ); delay_ms(TEMPO); PIOA->PIO_SODR = (1 << PIN_LED_BLUE ); PIOA->PIO_CODR = (1 << PIN_LED_GREEN ); delay_ms(TEMPO); } for(int i = 0; i<2;i++){ PIOA->PIO_CODR = (1 << PIN_LED_BLUE ); PIOA->PIO_CODR = (1 << PIN_LED_GREEN ); PIOC->PIO_SODR = (1 << PIN_LED_RED ); delay_ms(TEMPO*2); PIOA->PIO_SODR = (1 << PIN_LED_BLUE ); PIOA->PIO_SODR = (1 << PIN_LED_GREEN ); PIOC->PIO_CODR = (1 << PIN_LED_RED ); delay_ms(TEMPO*2); } */ } }