Commit 65bcb57a by vielex

Final version of TuningFork.c

parent 8d194d6c
Showing with 48 additions and 21 deletions
...@@ -42,48 +42,75 @@ void DisableInterrupts(void); // Disable interrupts ...@@ -42,48 +42,75 @@ 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 Switch = 0;
unsigned long temp = 0; unsigned char switchPressedLastTime = 0;
unsigned long lastState = 0; unsigned char toggle = 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; unsigned long volatile delay;
SYSCTL_RCGC2_R |= 0x00000001; // activate port A SYSCTL_RCGC2_R |= 0x01;
delay = SYSCTL_RCGC2_R; delay = SYSCTL_RCGC2_R;
GPIO_PORTA_AMSEL_R &= ~0x20; // no analog GPIO_PORTA_DEN_R &= ~0x08;
GPIO_PORTA_PCTL_R &= ~0x000F0000; // regular function GPIO_PORTA_DIR_R &= ~0x08; // MAKE PA2 A OUTPUT
GPIO_PORTA_DIR_R |= 0x20; // make PA5 out GPIO_PORTA_DIR_R |= 0x04; // MAKE PA3 A INPUT
GPIO_PORTA_DR8R_R |= 0x20; // can drive up to 8mA out GPIO_PORTA_AFSEL_R &= ~0x08; //DIASBLE ALT FUNCTION ON PA2 AND PA3
GPIO_PORTA_AFSEL_R &= ~0x20; // disable alt funct on PA5 GPIO_PORTA_AFSEL_R &= ~0x04;
GPIO_PORTA_DEN_R |= 0x20; // enable digital I/O on PA5 GPIO_PORTA_DEN_R |= 0x0C; // ENABLE DIGITAL I/O ON PA2 AND PA3
GPIO_PORTA_AMSEL_R &= ~0x08; /// DISABLE ANALOG FUNCTIONALITY OF PA
GPIO_PORTA_AMSEL_R &= ~0x04;
GPIO_PORTA_PCTL_R &= ~0x0000FF00;
NVIC_ST_CTRL_R = 0; // disable SysTick during setup NVIC_ST_CTRL_R = 0; // disable SysTick during setup
NVIC_ST_RELOAD_R = 39999; // reload value for 500us (assuming 80MHz) NVIC_ST_RELOAD_R = 90908; // reload value
NVIC_ST_CURRENT_R = 0; // any write to current clears it NVIC_ST_CURRENT_R = 0; // any write to current clears it
NVIC_SYS_PRI3_R = NVIC_SYS_PRI3_R&0x00FFFFFF; // priority 0 NVIC_SYS_PRI3_R = (NVIC_SYS_PRI3_R&0x00FFFFFF)|0x40000000;
NVIC_ST_CTRL_R = 0x00000007; // enable with core clock and interrupts NVIC_ST_CTRL_R = 0x07;
EnableInterrupts(); EnableInterrupts();
} }
// called at 880 Hz // called at 880 Hz
void SysTick_Handler(void){ void SysTick_Handler(void){
if(flag==1) if (toggle) {
GPIO_PORTA_DATA_R ^= 0x04; GPIO_PORTA_DATA_R ^= 0x04;
else 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
unsigned char flag = 0;
TExaS_Init(SW_PIN_PA3, HEADPHONE_PIN_PA2,ScopeOn); TExaS_Init(SW_PIN_PA3, HEADPHONE_PIN_PA2,ScopeOn);
Sound_Init(); Sound_Init();
Switch = (GPIO_PORTA_DATA_R &0x08);
EnableInterrupts(); // enable after all initialization are done EnableInterrupts(); // enable after all initialization are done
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) while (Switch == 0x08 && flag ==0) {
{ Switch = (GPIO_PORTA_DATA_R &0x08);
flag ^= 1; GPIO_PORTA_DATA_R = 0x00;
toggle = 0 ;
}
while (Switch == 0x00 && flag == 0) {
Switch = (GPIO_PORTA_DATA_R &0x08);
toggle = 0 ;
} }
lastState = temp;
flag = 1;
while (Switch == 0x08 && flag == 1) {
Switch = (GPIO_PORTA_DATA_R &0x08);
toggle = 1; // Loop till switch pressed off
}
while (Switch == 0x00 && flag == 1){
Switch = (GPIO_PORTA_DATA_R &0x08);
toggle = 1; // Sound
}
flag = 0;
} }
} }
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