Commit 8d194d6c by Víctor Elexpe

Posible solution

parent 42bdbe3f
Showing with 28 additions and 2 deletions
...@@ -42,14 +42,34 @@ void DisableInterrupts(void); // Disable interrupts ...@@ -42,14 +42,34 @@ void DisableInterrupts(void); // Disable interrupts
void EnableInterrupts(void); // Enable interrupts void EnableInterrupts(void); // Enable interrupts
void WaitForInterrupt(void); // low power mode void WaitForInterrupt(void); // low power mode
unsigned long flag = 0;
unsigned long temp = 0;
unsigned long lastState = 0;
// input from PA3, output from PA2, SysTick interrupts // input from PA3, output from PA2, SysTick interrupts
void Sound_Init(void){ void Sound_Init(void){
unsigned long delay;
SYSCTL_RCGC2_R |= 0x00000001; // activate port A
delay = SYSCTL_RCGC2_R;
GPIO_PORTA_AMSEL_R &= ~0x20; // no analog
GPIO_PORTA_PCTL_R &= ~0x000F0000; // regular function
GPIO_PORTA_DIR_R |= 0x20; // make PA5 out
GPIO_PORTA_DR8R_R |= 0x20; // can drive up to 8mA out
GPIO_PORTA_AFSEL_R &= ~0x20; // disable alt funct on PA5
GPIO_PORTA_DEN_R |= 0x20; // enable digital I/O on PA5
NVIC_ST_CTRL_R = 0; // disable SysTick during setup
NVIC_ST_RELOAD_R = 39999; // reload value for 500us (assuming 80MHz)
NVIC_ST_CURRENT_R = 0; // any write to current clears it
NVIC_SYS_PRI3_R = NVIC_SYS_PRI3_R&0x00FFFFFF; // priority 0
NVIC_ST_CTRL_R = 0x00000007; // enable with core clock and interrupts
EnableInterrupts();
} }
// called at 880 Hz // called at 880 Hz
void SysTick_Handler(void){ void SysTick_Handler(void){
if(flag==1)
GPIO_PORTA_DATA_R ^= 0x04;
else GPIO_PORTA_DATA_R &= ~0x04;
} }
int main(void){// activate grader and set system clock to 80 MHz int main(void){// activate grader and set system clock to 80 MHz
...@@ -59,5 +79,11 @@ int main(void){// activate grader and set system clock to 80 MHz ...@@ -59,5 +79,11 @@ int main(void){// activate grader and set system clock to 80 MHz
while(1){ while(1){
// main program is free to perform other tasks // main program is free to perform other tasks
// do not use WaitForInterrupt() here, it may cause the TExaS to crash // do not use WaitForInterrupt() here, it may cause the TExaS to crash
temp = GPIO_PORTA_DATA_R & 0x08;
if(temp == 0x08 && lastState == 0x00)
{
flag ^= 1;
}
lastState = temp;
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment