Taltech_embedded/lab4/main.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
}
}