-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathspi_pot.c
67 lines (58 loc) · 1.81 KB
/
spi_pot.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/*
* spi_pot.c
*
* Created on: Oct 13, 2019
* Author: martin
*/
#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_memmap.h"
#include "inc/hw_ssi.h"
#include "inc/hw_ints.h"
#include "inc/hw_types.h"
#include "driverlib/ssi.h"
#include "driverlib/rom.h"
#include "driverlib/gpio.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/interrupt.h"
#include "spi_pot.h"
void auto_manual_mode_pins_init() {
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOC))
{
}
ROM_GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_4);
ROM_GPIOPadConfigSet(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_STRENGTH_8MA, GPIO_PIN_TYPE_STD_WPD);
ROM_SysCtlDelay(3);
ROM_GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_4, 0);
}
void spi_pot_init() {
// Enable the peripherals used by SSI2
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI2);
ROM_SysCtlDelay(3);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
ROM_SysCtlDelay(3);
// Enable the PINS used by SSI2
// There's no need to configure RX since the potentiometer is not sending anything to the uC
ROM_GPIOPinConfigure(GPIO_PB4_SSI2CLK);
ROM_GPIOPinConfigure(GPIO_PB5_SSI2FSS);
ROM_GPIOPinConfigure(GPIO_PB7_SSI2TX);
ROM_GPIOPinTypeSSI(GPIO_PORTB_BASE, GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_7 );
// SSI Configuration
ROM_SSIConfigSetExpClk(SSI2_BASE, ROM_SysCtlClockGet(), SSI_FRF_MOTO_MODE_0,
SSI_MODE_MASTER, SSI2_BIT_RATE, SSI2_DATA_SIZE);
ROM_SSIEnable(SSI2_BASE);
ROM_SysCtlDelay(3);
ROM_SSIDataPut(SSI2_BASE, POWER_STANDBY);
while(ROM_SSIBusy(SSI2_BASE))
{
}
// A delay is maybe needed here
}
void set_power(uint8_t power) {
ROM_SSIDataPut(SSI2_BASE, power);
while(ROM_SSIBusy(SSI2_BASE))
{
}
}