C32 main Module
Files:
Interface:
Function: main
Arguments: None.
Returns: None.
Description:Intializes Ports, SPI, AD.
Runs in infinite loop to detect SPI communications and check battery level.
Function: InitPorts
Arguments: None.
Returns: None.
Description:Intializes Ports on the C32
Enable the shift register outputs
T0 = Shift Clock
T1 = Storage Clock
T2 = Serial Input
Function: InitSPI
Arguments: None.
Returns: None.
Description:Intializes SPI on C32.
Function: Checkbattery
Arguments: Character representing the timer number
Returns: Integer representing the battery level(0-1023).
Description:Reads the voltage across the resistor network on the AD pin.
Function: ClockLEDState
Arguments: Character array representing the bytes to shift in.
Returns: None.
Description:Clocks data in the LEDs array through the shift register.
Enables digits to display on the 7-segment.
Function: DisplayState
Arguments: Character array representing the bytes to shift in.
Returns: None.
Description:Maps desired segment digit to the data to shift in the register and
populates LED array. Calls ClockLEDState to display data.
Pseudo-Code:
void main(void)
Intialize Ports, SPI, AD
Forever
Check Battery
Check SPI flag via interrupt
void InitPorts(void)
Enable the shift register outputs
T0 = Shift Clock
T1 = Storage Clock
T2 = Serial Input
void InitSPI(void)
Set baud rate to /256
Set phase to mode 3
Make slave
Enable interrupts
Enable SPI
int Checkbattery(void)
Read AD level of the battery pin
void DisplayState(char)
Segment-to-byte mapping
Shift in 'dot' bit if desired digit is greater than 9
Store shift bits for displaying the appropriate digits
Output data to shift register
void ClockLEDState(char [])
For each bit
Put data on pin 2
Clock data
Enable data on the storage register
Interrupts:
void interrupt _Vec_SPI HandleSPI(void)
SPI interrupt response routine
Check SPISR to see if data was received then write to SPIDR to clear
Set SPI_Data_Received to YES