Add CAN send logic and DIO mapping
This commit is contained in:
parent
eb994ad693
commit
0f7a82d6bb
@ -35,7 +35,7 @@ extern "C" {
|
|||||||
extern ADC_HandleTypeDef hadc1;
|
extern ADC_HandleTypeDef hadc1;
|
||||||
|
|
||||||
/* USER CODE BEGIN Private defines */
|
/* USER CODE BEGIN Private defines */
|
||||||
|
#define NUM_ADC_PINS 16
|
||||||
/* USER CODE END Private defines */
|
/* USER CODE END Private defines */
|
||||||
|
|
||||||
void MX_ADC1_Init(void);
|
void MX_ADC1_Init(void);
|
||||||
|
@ -34,6 +34,20 @@ extern "C" {
|
|||||||
|
|
||||||
/* USER CODE BEGIN Private defines */
|
/* USER CODE BEGIN Private defines */
|
||||||
|
|
||||||
|
#define NUM_DIO_PINS 6
|
||||||
|
|
||||||
|
static struct {
|
||||||
|
GPIO_TypeDef* port;
|
||||||
|
uint16_t pin;
|
||||||
|
} DIO_PIN_MAP[NUM_DIO_PINS] = {
|
||||||
|
/* 0 */ { .port = D1_IC_GPIO_Port, .pin = D1_IC_Pin},
|
||||||
|
/* 1 */ { .port = D2_GPIO_Port, .pin = D2_Pin},
|
||||||
|
/* 2 */ { .port = D3_GPIO_Port, .pin = D3_Pin},
|
||||||
|
/* 3 */ { .port = D4_IC_GPIO_Port, .pin = D4_IC_Pin},
|
||||||
|
/* 4 */ { .port = D5_GPIO_Port, .pin = D5_Pin},
|
||||||
|
/* 5 */ { .port = D6_GPIO_Port, .pin = D6_Pin},
|
||||||
|
};
|
||||||
|
|
||||||
/* USER CODE END Private defines */
|
/* USER CODE END Private defines */
|
||||||
|
|
||||||
void MX_GPIO_Init(void);
|
void MX_GPIO_Init(void);
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
// CHOOSE ONE, comment the other or comment both and use -D SN_FRONT
|
// CHOOSE ONE, comment the other or comment both and use -D SN_FRONT
|
||||||
#define SN_FRONT
|
#define SN_FRONT
|
||||||
#define SN_REAR
|
//#define SN_REAR
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
@ -72,11 +72,12 @@ typedef struct {
|
|||||||
can_signal_t signals[9];
|
can_signal_t signals[9];
|
||||||
} can_pkt_t;
|
} can_pkt_t;
|
||||||
|
|
||||||
|
#define NUM_TX_PKT 4
|
||||||
#define ADQ (1<<12)
|
#define ADQ (1<<12)
|
||||||
|
|
||||||
#ifdef SN_FRONT
|
#ifdef SN_FRONT
|
||||||
|
|
||||||
static can_pkt_t CAN_SIGNAL_MAP[4] {
|
static can_pkt_t CAN_SIGNAL_MAP[NUM_TX_PKT] = {
|
||||||
{
|
{
|
||||||
.can_id = 0x0D1, .dlc = 3, .num_signals = 7, .period = 100, .signals = {
|
.can_id = 0x0D1, .dlc = 3, .num_signals = 7, .period = 100, .signals = {
|
||||||
{ .type = DIN, .channel = R5, .start = 0, .length = 1, .factor = 1., .name = "LS L" },
|
{ .type = DIN, .channel = R5, .start = 0, .length = 1, .factor = 1., .name = "LS L" },
|
||||||
@ -117,7 +118,7 @@ static can_pkt_t CAN_SIGNAL_MAP[4] {
|
|||||||
|
|
||||||
#ifdef SN_REAR
|
#ifdef SN_REAR
|
||||||
|
|
||||||
static can_pkt_t CAN_SIGNAL_MAP[4] {
|
static can_pkt_t CAN_SIGNAL_MAP[NUM_TX_PKT] = {
|
||||||
{
|
{
|
||||||
.can_id = 0x0D2, .dlc = 7, .num_signals = 9, .period = 100, .signals = {
|
.can_id = 0x0D2, .dlc = 7, .num_signals = 9, .period = 100, .signals = {
|
||||||
{ .type = DIN, .channel = L9, .start = 0, .length = 1, .factor = 1., .name = "ExtTSOn" },
|
{ .type = DIN, .channel = L9, .start = 0, .length = 1, .factor = 1., .name = "ExtTSOn" },
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
|
|
||||||
/* Private includes ----------------------------------------------------------*/
|
/* Private includes ----------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN Includes */
|
/* USER CODE BEGIN Includes */
|
||||||
|
#include "mappings_o.h"
|
||||||
/* USER CODE END Includes */
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
/* Private typedef -----------------------------------------------------------*/
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
@ -49,7 +49,8 @@
|
|||||||
|
|
||||||
/* USER CODE BEGIN PV */
|
/* USER CODE BEGIN PV */
|
||||||
/* Declare buffer in D1 domain SRAM */
|
/* Declare buffer in D1 domain SRAM */
|
||||||
static uint16_t adc_values[16];
|
static uint16_t adc_values[NUM_ADC_PINS];
|
||||||
|
static uint8_t dio_values[NUM_DIO_PINS];
|
||||||
/* USER CODE END PV */
|
/* USER CODE END PV */
|
||||||
|
|
||||||
/* Private function prototypes -----------------------------------------------*/
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
@ -108,31 +109,106 @@ int main(void)
|
|||||||
/* USER CODE BEGIN 2 */
|
/* USER CODE BEGIN 2 */
|
||||||
|
|
||||||
if (HAL_ADCEx_Calibration_Start(&hadc1, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED) != HAL_OK)
|
if (HAL_ADCEx_Calibration_Start(&hadc1, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED) != HAL_OK)
|
||||||
{
|
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
|
||||||
|
|
||||||
if (HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_values, 16) != HAL_OK)
|
if (HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_values, NUM_ADC_PINS) != HAL_OK)
|
||||||
{
|
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
|
||||||
|
|
||||||
HAL_TIM_Base_Start(&htim6);
|
HAL_TIM_Base_Start(&htim6);
|
||||||
|
|
||||||
|
// CAN TX PREP
|
||||||
|
|
||||||
|
FDCAN_TxHeaderTypeDef txHeader;
|
||||||
|
|
||||||
|
// Prep the tx frame
|
||||||
|
txHeader.ErrorStateIndicator = FDCAN_ESI_PASSIVE;
|
||||||
|
txHeader.BitRateSwitch = FDCAN_BRS_OFF;
|
||||||
|
txHeader.FDFormat = FDCAN_CLASSIC_CAN;
|
||||||
|
txHeader.TxEventFifoControl = FDCAN_NO_TX_EVENTS;
|
||||||
|
txHeader.IdType = FDCAN_STANDARD_ID;
|
||||||
|
txHeader.Identifier = 0x0;
|
||||||
|
txHeader.TxFrameType = FDCAN_DATA_FRAME;
|
||||||
|
txHeader.DataLength = 8;
|
||||||
|
|
||||||
|
if (HAL_FDCAN_ActivateNotification(&hfdcan1, FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0) != HAL_OK)
|
||||||
|
Error_Handler();
|
||||||
|
|
||||||
|
if (HAL_FDCAN_ConfigGlobalFilter(&hfdcan1, FDCAN_REJECT, FDCAN_REJECT,
|
||||||
|
FDCAN_REJECT_REMOTE, FDCAN_REJECT_REMOTE) != HAL_OK)
|
||||||
|
Error_Handler();
|
||||||
|
|
||||||
|
// TODO: Add Filters and Rx Handler
|
||||||
|
|
||||||
|
if (HAL_FDCAN_Start(&hfdcan1) != HAL_OK)
|
||||||
|
Error_Handler();
|
||||||
|
|
||||||
/* USER CODE END 2 */
|
/* USER CODE END 2 */
|
||||||
|
|
||||||
/* Infinite loop */
|
/* Infinite loop */
|
||||||
/* USER CODE BEGIN WHILE */
|
/* USER CODE BEGIN WHILE */
|
||||||
while (1)
|
for (unsigned int mscounter = 0; 1; mscounter++)
|
||||||
{
|
{
|
||||||
/* USER CODE END WHILE */
|
/* USER CODE END WHILE */
|
||||||
|
|
||||||
/* USER CODE BEGIN 3 */
|
/* USER CODE BEGIN 3 */
|
||||||
HAL_GPIO_WritePin(STATUS_G_GPIO_Port, STATUS_G_Pin, GPIO_PIN_SET);
|
for (int di = 0; di < NUM_DIO_PINS; di++) {
|
||||||
HAL_Delay(500);
|
dio_values[di] = HAL_GPIO_ReadPin(
|
||||||
HAL_GPIO_WritePin(STATUS_G_GPIO_Port, STATUS_G_Pin, GPIO_PIN_RESET);
|
DIO_PIN_MAP[di].port,
|
||||||
HAL_Delay(500);
|
DIO_PIN_MAP[di].pin
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int pi = 0; pi < NUM_TX_PKT; pi++) {
|
||||||
|
|
||||||
|
can_pkt_t* pktinfo = &(CAN_SIGNAL_MAP[pi]);
|
||||||
|
|
||||||
|
if (mscounter % pktinfo->period == 0) {
|
||||||
|
|
||||||
|
txHeader.Identifier = pktinfo->can_id;
|
||||||
|
txHeader.DataLength = pktinfo->dlc;
|
||||||
|
uint64_t txData = 0;
|
||||||
|
|
||||||
|
for (int si = 0; si < pktinfo->num_signals; si++) {
|
||||||
|
|
||||||
|
can_signal_t* signal = &(pktinfo->signals[si]);
|
||||||
|
uint16_t value = 0;
|
||||||
|
switch (signal->type) {
|
||||||
|
case DIN:
|
||||||
|
value = dio_values[signal->channel];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case AIN:
|
||||||
|
value = signal->factor * adc_values[signal->channel];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FIN:
|
||||||
|
/* NYI */
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t mask = 0xFFFF >> (16 - signal->length);
|
||||||
|
txData |= ((uint64_t) (value & mask)) << (signal->start);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan1, &txHeader, (uint8_t*) &txData) != HAL_OK)
|
||||||
|
Error_Handler();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mscounter >= 500) {
|
||||||
|
mscounter = 0;
|
||||||
|
HAL_GPIO_TogglePin(STATUS_G_GPIO_Port, STATUS_G_Pin);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Move all this into a 1kHz timer callback!
|
||||||
|
HAL_Delay(1);
|
||||||
|
|
||||||
}
|
}
|
||||||
/* USER CODE END 3 */
|
/* USER CODE END 3 */
|
||||||
}
|
}
|
||||||
@ -229,9 +305,7 @@ void Error_Handler(void)
|
|||||||
/* User can add his own implementation to report the HAL error return state */
|
/* User can add his own implementation to report the HAL error return state */
|
||||||
HAL_GPIO_WritePin(STATUS_R_GPIO_Port, STATUS_R_Pin, GPIO_PIN_SET);
|
HAL_GPIO_WritePin(STATUS_R_GPIO_Port, STATUS_R_Pin, GPIO_PIN_SET);
|
||||||
__disable_irq();
|
__disable_irq();
|
||||||
while (1)
|
while (1);
|
||||||
{
|
|
||||||
}
|
|
||||||
/* USER CODE END Error_Handler_Debug */
|
/* USER CODE END Error_Handler_Debug */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user