Files
@ a477ff27aff8
Branch filter:
Location: Jabel/Software/hoverboard-firmware-hack_modified20190825/Src/control.c - annotation
a477ff27aff8
3.0 KiB
text/x-csrc
Updated Software repo
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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 8d9542865bd2 |
#include "stm32f1xx_hal.h"
#include "defines.h"
#include "setup.h"
#include "config.h"
#include <stdbool.h>
#include <string.h>
TIM_HandleTypeDef TimHandle;
uint8_t ppm_count = 0;
uint32_t timeout = 100;
uint8_t nunchuck_data[6] = {0};
uint8_t i2cBuffer[2];
extern I2C_HandleTypeDef hi2c2;
DMA_HandleTypeDef hdma_i2c2_rx;
DMA_HandleTypeDef hdma_i2c2_tx;
#ifdef CONTROL_PPM
uint16_t ppm_captured_value[PPM_NUM_CHANNELS + 1] = {500, 500};
uint16_t ppm_captured_value_buffer[PPM_NUM_CHANNELS+1] = {500, 500};
uint32_t ppm_timeout = 0;
bool ppm_valid = true;
#define IN_RANGE(x, low, up) (((x) >= (low)) && ((x) <= (up)))
void PPM_ISR_Callback() {
// Dummy loop with 16 bit count wrap around
uint16_t rc_delay = TIM2->CNT;
TIM2->CNT = 0;
if (rc_delay > 3000) {
if (ppm_valid && ppm_count == PPM_NUM_CHANNELS) {
ppm_timeout = 0;
memcpy(ppm_captured_value, ppm_captured_value_buffer, sizeof(ppm_captured_value));
}
ppm_valid = true;
ppm_count = 0;
}
else if (ppm_count < PPM_NUM_CHANNELS && IN_RANGE(rc_delay, 900, 2100)){
timeout = 0;
ppm_captured_value_buffer[ppm_count++] = CLAMP(rc_delay, 1000, 2000) - 1000;
} else {
ppm_valid = false;
}
}
// SysTick executes once each ms
void PPM_SysTick_Callback() {
ppm_timeout++;
// Stop after 500 ms without PPM signal
if(ppm_timeout > 500) {
int i;
for(i = 0; i < PPM_NUM_CHANNELS; i++) {
ppm_captured_value[i] = 500;
}
ppm_timeout = 0;
}
}
void PPM_Init() {
GPIO_InitTypeDef GPIO_InitStruct;
/*Configure GPIO pin : PA3 */
GPIO_InitStruct.Pin = GPIO_PIN_3;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
__HAL_RCC_TIM2_CLK_ENABLE();
TimHandle.Instance = TIM2;
TimHandle.Init.Period = UINT16_MAX;
TimHandle.Init.Prescaler = (SystemCoreClock/DELAY_TIM_FREQUENCY_US)-1;;
TimHandle.Init.ClockDivision = 0;
TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
HAL_TIM_Base_Init(&TimHandle);
/* EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI3_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI3_IRQn);
HAL_TIM_Base_Start(&TimHandle);
}
#endif
void Nunchuck_Init() {
//-- START -- init WiiNunchuck
i2cBuffer[0] = 0xF0;
i2cBuffer[1] = 0x55;
HAL_I2C_Master_Transmit(&hi2c2,0xA4,(uint8_t*)i2cBuffer, 2, 100);
HAL_Delay(10);
i2cBuffer[0] = 0xFB;
i2cBuffer[1] = 0x00;
HAL_I2C_Master_Transmit(&hi2c2,0xA4,(uint8_t*)i2cBuffer, 2, 100);
HAL_Delay(10);
}
void Nunchuck_Read() {
i2cBuffer[0] = 0x00;
HAL_I2C_Master_Transmit(&hi2c2,0xA4,(uint8_t*)i2cBuffer, 1, 100);
HAL_Delay(5);
if (HAL_I2C_Master_Receive(&hi2c2,0xA4,(uint8_t*)nunchuck_data, 6, 100) == HAL_OK) {
timeout = 0;
}
if (timeout > 3) {
HAL_Delay(50);
Nunchuck_Init();
}
//setScopeChannel(0, (int)nunchuck_data[0]);
//setScopeChannel(1, (int)nunchuck_data[1]);
//setScopeChannel(2, (int)nunchuck_data[5] & 1);
//setScopeChannel(3, ((int)nunchuck_data[5] >> 1) & 1);
}
|