Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdint.h>
- #include "tm4c123gh6pm.h"
- //#include "emp_type.h"
- #include "string.h"
- #define SYSTICK_RELOAD_VALUE 80000 // 5 mS
- #define NVIC_INT_CTRL_PEND_SYST 0x04000000 // Pend a systick int
- #define NVIC_INT_CTRL_UNPEND_SYST 0x02000000 // Unpend a systick int
- #define SYSTICK_PRIORITY 0x7E
- static int a;
- void SysTick_Handler(void)
- /*****************************************************************************
- * Function : See module specification (.h-file).
- *****************************************************************************/
- {
- // Hardware clears systick int reguest
- a++;
- // Do your stuff
- }
- void enable_global_int()
- {
- // enable interrupts.
- __asm("cpsie i");
- }
- void disable_global_int()
- {
- // disable interrupts.
- __asm("cpsid i");
- }
- void SysTickInit()
- {
- // Disable systick timer
- NVIC_ST_CTRL_R &= ~(NVIC_ST_CTRL_ENABLE);
- // Set current systick counter to reload value
- NVIC_ST_CURRENT_R = SYSTICK_RELOAD_VALUE;
- // Set Reload value, Systick reload register
- NVIC_ST_RELOAD_R = SYSTICK_RELOAD_VALUE;
- // NVIC systick setup, vector number 15
- // Clear pending systick interrupt request
- NVIC_INT_CTRL_R |= NVIC_INT_CTRL_UNPEND_SYST;
- // Set systick priority to 0x10, first clear then set.
- NVIC_SYS_PRI3_R &= ~(NVIC_SYS_PRI3_TICK_M);
- NVIC_SYS_PRI3_R |= (NVIC_SYS_PRI3_TICK_M & (SYSTICK_PRIORITY<<NVIC_SYS_PRI3_TICK_S));
- // Select systick clock source, Use core clock
- NVIC_ST_CTRL_R |= NVIC_ST_CTRL_CLK_SRC;
- // Enable systick interrupt
- NVIC_ST_CTRL_R |= NVIC_ST_CTRL_INTEN;
- // Enable and start timer
- NVIC_ST_CTRL_R |= NVIC_ST_CTRL_ENABLE;
- }
- int main(void)
- {
- enable_global_int();
- int dummy;
- SYSCTL_RCGC2_R = SYSCTL_RCGC2_GPIOF;
- dummy = SYSCTL_RCGC2_R;
- GPIO_PORTF_DIR_R=0x0E; //DDRA
- GPIO_PORTF_DEN_R=0x1E; //like PORTA
- GPIO_PORTF_LOCK_R = 0x4C4F434B; // Unlock the CR register
- GPIO_PORTF_CR_R = 0xFF; // Enable overwrite of PUR to FP0
- GPIO_PORTF_PUR_R=0x10; //PULL UP HERE
- int i=0;
- SysTickInit();
- int aa,or,sw,n;
- aa=or=sw=n=0;
- GPIO_PORTF_DATA_R=0x00;
- while(1)
- {
- if(n==2)or=1;
- if (GPIO_PORTF_DATA_R & 0x10)
- {
- while(aa==1) //auto mode
- {
- n=0; //set buttons clicked to 0
- while(1)
- {
- if (n>0)aa=0; //if button is pushed, it exits auto mode
- NVIC_ST_CTRL_R |= NVIC_ST_CTRL_ENABLE; //enables systick
- if (a==40) //200 ms
- {
- if(GPIO_PORTF_DATA_R!=0x0E) //if it is at the end, goes to 0x00;
- {
- GPIO_PORTF_DATA_R=0x00;
- }
- else
- {
- GPIO_PORTF_DATA_R++; //next diode
- }
- a=0; //sets the systick counts to 0
- break; //next loop of while, 200 ms has elapsed
- }
- }
- }
- while(or==1)
- {
- }
- }
- else
- {
- n++;
- //GPIO_PORTF_DATA_R|=0x01;
- //GPIO_PORTF_DATA_R++;
- //GPIO_PORTF_DATA_R&=~(0x01);
- switch (i)
- {
- case 0:
- GPIO_PORTF_DATA_R=0x00;
- i++;
- while(a!=200)
- {
- NVIC_ST_CTRL_R |= NVIC_ST_CTRL_ENABLE;
- }
- break;
- case 1:
- GPIO_PORTF_DATA_R=0x02;
- while(a!=200)
- {
- NVIC_ST_CTRL_R |= NVIC_ST_CTRL_ENABLE;
- }
- break;
- case 2:
- GPIO_PORTF_DATA_R=0x04;
- while(a!=200)
- {
- NVIC_ST_CTRL_R |= NVIC_ST_CTRL_ENABLE;
- }
- break;
- case 3:
- GPIO_PORTF_DATA_R=0x06;
- while(a!=200)
- {
- NVIC_ST_CTRL_R |= NVIC_ST_CTRL_ENABLE;
- }
- break;
- case 4:
- GPIO_PORTF_DATA_R=0x08;
- while(a!=200)
- {
- NVIC_ST_CTRL_R |= NVIC_ST_CTRL_ENABLE;
- }
- break;
- case 5:
- GPIO_PORTF_DATA_R=0x0A;
- while(a!=200)
- {
- NVIC_ST_CTRL_R |= NVIC_ST_CTRL_ENABLE;
- }
- break;
- case 6:
- GPIO_PORTF_DATA_R=0x0C;
- while(a!=200)
- {
- NVIC_ST_CTRL_R |= NVIC_ST_CTRL_ENABLE;
- }
- break;
- case 7:
- GPIO_PORTF_DATA_R=0x0E;
- while(a!=200)
- {
- NVIC_ST_CTRL_R |= NVIC_ST_CTRL_ENABLE;
- }
- i=0;
- break;
- }
- if (i!=0)i++;
- }
- }
- return(0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement