PLL.c // add to software & folder
SysTick.c // add to software & folder
PLL.h // only on folder
SysTick.h // only on folder
startup.s
*/
#include "PLL.h"
#include "SysTick.h"
#define LIGHT (*((volatile unsigned long *)0x400050FC))
#define GPIO_PORTB_OUT (*((volatile unsigned long *)0x400050FC)) // bits 5-0
#define GPIO_PORTB_DIR_R (*((volatile unsigned long *)0x40005400))
#define GPIO_PORTB_AFSEL_R (*((volatile unsigned long *)0x40005420))
#define GPIO_PORTB_DEN_R (*((volatile unsigned long *)0x4000551C))
#define GPIO_PORTB_AMSEL_R (*((volatile unsigned long *)0x40005528))
#define GPIO_PORTB_PCTL_R (*((volatile unsigned long *)0x4000552C))
#define GPIO_PORTE_IN (*((volatile unsigned long *)0x4002400C)) // bits 1-0
#define SENSOR (*((volatile unsigned long *)0x4002400C))
#define GPIO_PORTE_DIR_R (*((volatile unsigned long *)0x40024400))
#define GPIO_PORTE_AFSEL_R (*((volatile unsigned long *)0x40024420))
#define GPIO_PORTE_DEN_R (*((volatile unsigned long *)0x4002451C))
#define GPIO_PORTE_AMSEL_R (*((volatile unsigned long *)0x40024528))
#define GPIO_PORTE_PCTL_R (*((volatile unsigned long *)0x4002452C))
#define SYSCTL_RCGC2_R (*((volatile unsigned long *)0x400FE108))
#define SYSCTL_RCGC2_GPIOE 0x00000010 // port E Clock Gating Control
#define SYSCTL_RCGC2_GPIOB 0x00000002 // port B Clock Gating Control
// Linked data structure
struct State {
unsigned long Out;
unsigned long Time;
unsigned long Next[4];
};
typedef const struct State STyp;
#define goN 0
#define waitN 1
#define goE 2
#define waitE 3
STyp FSM[4] = {
{0x21,500,{goN,waitN,goN,waitN}},
{0x22, 200,{goE,goE,goE,goE}},
{0x0C,500,{goE,goE,waitE,waitE}},
{0x14, 200,{goN,goN,goN,goN}}
};
unsigned long S; // index to the current state
unsigned long Input;
int main(void){
volatile unsigned long delay;
PLL_Init(); // 80 MHz, Program 10.1
SysTick_Init(); // Program 10.2
SYSCTL_RCGC2_R |= 0x12; // 1) B E
delay = SYSCTL_RCGC2_R; // 2) no need to unlock
GPIO_PORTE_AMSEL_R &= ~0x03; // 3) disable analog function on PE1-0
GPIO_PORTE_AFSEL_R &= ~0x03; // 6) regular function on PE1-0
GPIO_PORTE_DIR_R &=~ 0x03; // 5) inputs on PE1-0
GPIO_PORTE_DEN_R |= 0x03; // 7) enable digital on PE1-0
GPIO_PORTE_PCTL_R &=~ 0x000000FF; // 4) enable regular GPIO
GPIO_PORTB_AMSEL_R &= ~0x3F; // 3) disable analog function on PB5-0
GPIO_PORTB_PCTL_R &= ~0x00FFFFFF; // 4) enable regular GPIO
GPIO_PORTB_DIR_R |= 0x3F; // 5) outputs on PB5-0
GPIO_PORTB_AFSEL_R &= ~0x3F; // 6) regular function on PB5-0
GPIO_PORTB_DEN_R |= 0x3F; // 7) enable digital on PB5-0
S = goN;
while(1){
LIGHT = FSM[S].Out; // set lights
SysTick_Wait10ms(FSM[S].Time);
Input = SENSOR; // read sensors
S = FSM[S].Next[Input];
}
}
Use 1k Resistors
No comments:
Post a Comment