refactor SPI handling and introduce SPI CS, forgotten files
This commit is contained in:
parent
9acd56b79b
commit
1cc4785ddb
55
game-ctrl/disabled/led.c
Normal file
55
game-ctrl/disabled/led.c
Normal file
@ -0,0 +1,55 @@
|
||||
#include "led.h"
|
||||
#include <msp430g2553.h>
|
||||
#include "scheduler.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
|
||||
void ledGreenOn() {
|
||||
P1OUT |= BIT0;
|
||||
}
|
||||
|
||||
void ledGreenOff() {
|
||||
P1OUT &= ~BIT0;
|
||||
}
|
||||
|
||||
void ledGreenToggle() {
|
||||
P1OUT ^= BIT0;
|
||||
}
|
||||
|
||||
void ledBlueOn() {
|
||||
P1OUT |= BIT1;
|
||||
}
|
||||
|
||||
void ledBlueOff() {
|
||||
P1OUT &= ~BIT1;
|
||||
}
|
||||
|
||||
void ledBlueToggle() {
|
||||
P1OUT ^= BIT1;
|
||||
}
|
||||
|
||||
void ledExec(void *args) {
|
||||
static uint16_t i = 0;
|
||||
|
||||
if (i == 0) {
|
||||
ledGreenOff();
|
||||
i = 1;
|
||||
} else {
|
||||
ledGreenOn();
|
||||
i = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void ledInit() {
|
||||
// BIT0: green
|
||||
// BIT1: blue
|
||||
P1DIR |= BIT0|BIT1;
|
||||
|
||||
ledGreenOff();
|
||||
ledBlueOff();
|
||||
|
||||
|
||||
// schAdd(ledExec, NULL, 0, 500);
|
||||
}
|
||||
|
||||
|
15
game-ctrl/disabled/led.h
Normal file
15
game-ctrl/disabled/led.h
Normal file
@ -0,0 +1,15 @@
|
||||
#ifndef LED_H_
|
||||
#define LED_H_
|
||||
|
||||
|
||||
void ledBlueOff();
|
||||
void ledBlueOn();
|
||||
void ledBlueToggle();
|
||||
void ledGreenOff();
|
||||
void ledGreenOn();
|
||||
void ledGreenToggle();
|
||||
|
||||
void ledInit();
|
||||
void ledExec();
|
||||
|
||||
#endif /* LED_H_ */
|
50
game-ctrl/spi.c
Normal file
50
game-ctrl/spi.c
Normal file
@ -0,0 +1,50 @@
|
||||
#include <msp430g2553.h>
|
||||
#include "spi.h"
|
||||
|
||||
void spiInit() {
|
||||
// SPI in master mode
|
||||
UCB0CTL0 = UCMST;
|
||||
// SPI timing config
|
||||
UCB0CTL1 = UCSSEL_3;
|
||||
// Faster than 8 ends up in strange communication errors
|
||||
// between the both MCUs.
|
||||
// With 8 the transfer of a complete 110 pixel canvas takes
|
||||
// about 720us.
|
||||
// 8 was still too fast and caused problems.
|
||||
UCB0BR0 = 16;
|
||||
UCB0BR1 = 0;
|
||||
|
||||
// BIT5: UCB0CLK
|
||||
// BIT6: UCB0SOMI
|
||||
// BIT7: UCB0SIMO
|
||||
P1SEL |= BIT5 | BIT6 | BIT7;
|
||||
P1SEL2 |= BIT5 | BIT6 | BIT7;
|
||||
P1DIR |= BIT5 | BIT7;
|
||||
|
||||
// Device Select Lines: 0: Canvas, 1: Display, 2: Sound
|
||||
P1DIR |= BIT0 | BIT1 | BIT2;
|
||||
// Disable all of them
|
||||
P1OUT |= BIT0 | BIT1 | BIT2;
|
||||
|
||||
// enable SPI module
|
||||
UCB0CTL1 &= ~UCSWRST;
|
||||
}
|
||||
|
||||
void spiSendBegin(t_SpiDeviceSelector d) {
|
||||
uint16_t bit = ((uint16_t[]){ BIT0, BIT1, BIT2 })[d];
|
||||
P1OUT &= ~bit;
|
||||
}
|
||||
|
||||
void spiSendEnd(t_SpiDeviceSelector d) {
|
||||
while (UCB0STAT & UCBUSY);
|
||||
uint16_t bit = ((uint16_t[]){ BIT0, BIT1, BIT2 })[d];
|
||||
P1OUT |= bit;
|
||||
}
|
||||
|
||||
void spiSendOctet(uint8_t v) {
|
||||
// wait for TX buffer empty
|
||||
while (!(UC0IFG & UCB0TXIFG));
|
||||
// load octet into TX buffer
|
||||
UCB0TXBUF = v;
|
||||
}
|
||||
|
16
game-ctrl/spi.h
Normal file
16
game-ctrl/spi.h
Normal file
@ -0,0 +1,16 @@
|
||||
#ifndef _SPI_H_
|
||||
#define _SPI_H_
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
|
||||
typedef enum { e_SPI_CANVAS, e_SPI_DISPLAY, e_SPI_SOUND } t_SpiDeviceSelector;
|
||||
|
||||
void spiInit();
|
||||
void spiSendBegin(t_SpiDeviceSelector d);
|
||||
void spiSendEnd(t_SpiDeviceSelector d);
|
||||
void spiSendOctet(uint8_t v);
|
||||
|
||||
|
||||
|
||||
#endif // _SPI_H_
|
Loading…
x
Reference in New Issue
Block a user