94 lines
2.7 KiB
C
94 lines
2.7 KiB
C
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
|
|
#include "bump.h"
|
|
#include "systick.h"
|
|
#include "motor_simple.h"
|
|
#include "clock.h"
|
|
|
|
#include "inc/msp432p401r.h"
|
|
|
|
// bit-banded addresses, positive logic
|
|
#define SW2IN ((*((volatile uint8_t *)(0x42098010)))^1)
|
|
#define SW1IN ((*((volatile uint8_t *)(0x42098004)))^1)
|
|
|
|
#define SIZE 100
|
|
|
|
// sinusoidal duty plot table
|
|
const uint32_t pulse_us[SIZE] = {
|
|
5000, 5308, 5614, 5918, 6219, 6514, 6804, 7086, 7361, 7626,
|
|
7880, 8123, 8354, 8572, 8776, 8964, 9137, 9294, 9434, 9556,
|
|
9660, 9746, 9813, 9861, 9890, 9900, 9890, 9861, 9813, 9746,
|
|
9660, 9556, 9434, 9294, 9137, 8964, 8776, 8572, 8354, 8123,
|
|
7880, 7626, 7361, 7086, 6804, 6514, 6219, 5918, 5614, 5308,
|
|
5000, 4692, 4386, 4082, 3781, 3486, 3196, 2914, 2639, 2374,
|
|
2120, 1877, 1646, 1428, 1224, 1036, 863, 706, 566, 444,
|
|
340, 254, 187, 139, 110, 100, 110, 139, 187, 254,
|
|
340, 444, 566, 706, 863, 1036, 1224, 1428, 1646, 1877,
|
|
2120, 2374, 2639, 2914, 3196, 3486, 3781, 4082, 4386, 4692
|
|
};
|
|
|
|
void RedLEDInit(void) {
|
|
P1->SEL0 &= ~0x01;
|
|
P1->SEL1 &= ~0x01; // 1) configure P1.0 as GPIO
|
|
P1->DIR |= 0x01; // 2) make P1.0 out
|
|
P1->OUT &= ~0x01;
|
|
}
|
|
|
|
void SwitchInit(void) {
|
|
P1->SEL0 &= ~0x12;
|
|
P1->SEL1 &= ~0x12; // 1) configure P1.4 and P1.1 as GPIO
|
|
P1->DIR &= ~0x12; // 2) make P1.4 and P1.1 in
|
|
P1->REN |= 0x12; // 3) enable pull resistors on P1.4 and P1.1
|
|
P1->OUT |= 0x12; // P1.4 and P1.1 are pull-up
|
|
}
|
|
|
|
void WaitTouchRelease(void) {
|
|
while(!(SW1IN || SW2IN)) {} // wait for touch
|
|
while(SW1IN || SW2IN) {} // wait for release
|
|
}
|
|
|
|
int main_test_systick(void) {
|
|
ClockInit48MHz();
|
|
SysTickInit();
|
|
RedLEDInit();
|
|
uint32_t H = 7500;
|
|
uint32_t L = 10000 - H;
|
|
while (true) {
|
|
P1->OUT |= 0x01;
|
|
SysTickWait1us(H);
|
|
P1->OUT &= ~0x01;
|
|
SysTickWait1us(L);
|
|
}
|
|
}
|
|
|
|
// The heartbeat starts when the operator pushes Button 1
|
|
// The heartbeat stops when the operator pushes Button 2
|
|
// When beating, the P1.0 LED oscillates at 100 Hz (too fast to see with the eye)
|
|
// and the duty cycle is varied sinuosoidally once a second
|
|
int main_heartbeat(void) {
|
|
ClockInit48MHz();
|
|
// write this code
|
|
while (true) {
|
|
// write this code
|
|
}
|
|
}
|
|
|
|
int main_test_wheels(void) {
|
|
ClockInit48MHz();
|
|
SysTickInit();
|
|
SwitchInit();
|
|
BumpInit();
|
|
MotorInit(); // your function
|
|
while (true) {
|
|
WaitTouchRelease();
|
|
MotorForward(1500, 100); // your function
|
|
WaitTouchRelease();
|
|
MotorBackward(1500, 100); // your function
|
|
WaitTouchRelease();
|
|
MotorLeft(1500, 100); // your function
|
|
WaitTouchRelease();
|
|
MotorRight(1500, 100); // your function
|
|
}
|
|
}
|