Files

79 lines
2.1 KiB
C
Raw Permalink Normal View History

2026-06-12 02:55:04 -07:00
#include <ti/devices/msp/msp.h>
#include "../RTOS_Labs_common/LaunchPad.h"
#include "../inc/Clock.h"
#include "../inc/SSD1306.h"
#include "../RTOS_Labs_common/PWMA0.h"
#include "../RTOS_Labs_common/PWMA1.h"
#include "../RTOS_Labs_common/PWMG6.h"
#include "bump.h"
#include <stddef.h>
#define bump_right_pin (1<<31)
#define bump_left_pin (1<<27)
#define bump_center_pin (1<<28)
#define bump_pins (bump_right_pin | bump_center_pin | bump_left_pin)
extern void (*BumpTask)(bump_status);
void bump_init(){
IOMUX->SECCFG.PINCM[PA28INDEX] = (uint32_t) 0x00060081; // input, pull up
IOMUX->SECCFG.PINCM[PA31INDEX] = (uint32_t) 0x00060081;
IOMUX->SECCFG.PINCM[PA27INDEX] = (uint32_t) 0x00060081;
// From EdgeTriggered.c
GPIOA->POLARITY31_16 |= (2 << 22) | (2 << 24) | (2 << 30);
GPIOA->CPU_INT.ICLR = bump_pins;
GPIOA->CPU_INT.IMASK |= bump_pins;
// These were probably already done by S2 task but we'll just do it again
NVIC->IP[0] = (NVIC->IP[0]&(~0x0000FF00))|1<<14; // set priority (bits 15,14) IRQ 1
NVIC->ISER[0] = 1 << 1; // Group1 interrupt
}
bump_status bump_read(void){
uint32_t pins = GPIOA->DIN31_0;
bump_status status = 0x00; // no collisiosn
if((pins & bump_right_pin) == 0 ){
status |= bump_right;
}
if((pins & bump_left_pin)==0){
status|= bump_left;
}
if(( pins & bump_center_pin)==0){
status |= bump_center;
}
return status;
}
void bump_enable_interuppts(){
GPIOA->CPU_INT.ICLR = bump_pins;
GPIOA->CPU_INT.IMASK = bump_pins;
NVIC->IP[0] = (NVIC->IP[0] & (~0x000000FF)) | (2 << 6); // priority 2
NVIC_EnableIRQ(GPIOA_INT_IRQn);
}
void bump_disable_interuppts(){
GPIOA->CPU_INT.IMASK &= ~bump_pins;
}
void Bump_RegisterCallback(void( *callback)(bump_status status)){
BumpTask= callback;
}
void bump_collision(){
PWMA0_Break();
PWMA1_Break();
}
void Set_Servo(int16_t angle){
uint32_t center = 3100;
if(angle > 53) angle = 53;
if(angle < -53) angle = -53;
int32_t offset = (angle * 1200) / 53;
uint32_t ServoDuty = center + offset;
PWMG6_SetDuty(ServoDuty);
}