mirror of
https://github.com/DualTachyon/uv-k5-firmware.git
synced 2025-02-17 17:50:43 +08:00
Added support for reading the battery state.
This commit is contained in:
parent
aad89ee266
commit
7f9c9a15bd
9
board.c
9
board.c
@ -310,6 +310,15 @@ void BOARD_ADC_Init(void)
|
||||
ADC_SoftReset();
|
||||
}
|
||||
|
||||
void BOARD_ADC_GetBatteryInfo(uint16_t *pCh4, uint16_t *pCh9)
|
||||
{
|
||||
ADC_Start();
|
||||
|
||||
while (!ADC_CheckEndOfConversion(ADC_CH9));
|
||||
*pCh4 = ADC_GetValue(ADC_CH4);
|
||||
*pCh9 = ADC_GetValue(ADC_CH9);
|
||||
}
|
||||
|
||||
void BOARD_Init(void)
|
||||
{
|
||||
BOARD_PORTCON_Init();
|
||||
|
4
board.h
4
board.h
@ -17,9 +17,13 @@
|
||||
#ifndef BOARD_H
|
||||
#define BOARD_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
void BOARD_FLASH_Init(void);
|
||||
void BOARD_GPIO_Init(void);
|
||||
void BOARD_PORTCON_Init(void);
|
||||
void BOARD_ADC_Init(void);
|
||||
void BOARD_ADC_GetBatteryInfo(uint16_t *pCh4, uint16_t *pCh9);
|
||||
void BOARD_Init(void);
|
||||
|
||||
#endif
|
||||
|
@ -195,6 +195,8 @@
|
||||
#define SARADC_IF_FIFO_HFULL_VALUE_SET 1U
|
||||
#define SARADC_IF_FIFO_HFULL_BITS_SET (SARADC_IF_FIFO_HFULL_VALUE_SET << SARADC_IF_FIFO_HFULL_SHIFT)
|
||||
|
||||
#define SARADC_CH0_ADDR (SARADC_BASE_ADDR + 0x0010U)
|
||||
#define SARADC_CH0 (*(volatile uint32_t *)SARADC_CH0_ADDR)
|
||||
#define SARADC_EXTTRIG_SEL_ADDR (SARADC_BASE_ADDR + 0x00B0U)
|
||||
#define SARADC_EXTTRIG_SEL (*(volatile uint32_t *)SARADC_EXTTRIG_SEL_ADDR)
|
||||
|
||||
@ -224,6 +226,28 @@
|
||||
#define SARADC_CALIB_KD_VALID_VALUE_YES 1U
|
||||
#define SARADC_CALIB_KD_VALID_BITS_YES (SARADC_CALIB_KD_VALID_VALUE_YES << SARADC_CALIB_KD_VALID_SHIFT)
|
||||
|
||||
/* -------- ADC_CHx -------- */
|
||||
|
||||
typedef struct {
|
||||
uint32_t STAT;
|
||||
uint32_t DATA;
|
||||
} ADC_Channel_t;
|
||||
|
||||
#define ADC_CHx_STAT_EOC_SHIFT 0
|
||||
#define ADC_CHx_STAT_EOC_WIDTH 1
|
||||
#define ADC_CHx_STAT_EOC_MASK (((1U << ADC_CHx_STAT_EOC_WIDTH) - 1U) << ADC_CHx_STAT_EOC_SHIFT)
|
||||
#define ADC_CHx_STAT_EOC_VALUE_NOT_COMPLETE 0U
|
||||
#define ADC_CHx_STAT_EOC_BITS_NOT_COMPLETE (ADC_CHx_STAT_EOC_VALUE_NOT_COMPLETE << ADC_CHx_STAT_EOC_SHIFT)
|
||||
#define ADC_CHx_STAT_EOC_VALUE_COMPLETE 1U
|
||||
#define ADC_CHx_STAT_EOC_BITS_COMPLETE (ADC_CHx_STAT_EOC_VALUE_COMPLETE << ADC_CHx_STAT_EOC_SHIFT)
|
||||
|
||||
#define ADC_CHx_DATA_DATA_SHIFT 0
|
||||
#define ADC_CHx_DATA_DATA_WIDTH 12
|
||||
#define ADC_CHx_DATA_DATA_MASK (((1U << ADC_CHx_DATA_DATA_WIDTH) - 1U) << ADC_CHx_DATA_DATA_SHIFT)
|
||||
#define ADC_CHx_DATA_NUM_SHIFT 12
|
||||
#define ADC_CHx_DATA_NUM_WIDTH 4
|
||||
#define ADC_CHx_DATA_NUM_MASK (((1U << ADC_CHx_DATA_NUM_WIDTH) - 1U) << ADC_CHx_DATA_NUM_SHIFT)
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
23
driver/adc.c
23
driver/adc.c
@ -125,3 +125,26 @@ void ADC_Configure(ADC_Config_t *pAdc)
|
||||
}
|
||||
}
|
||||
|
||||
void ADC_Start(void)
|
||||
{
|
||||
SARADC_START = (SARADC_START & ~SARADC_START_START_MASK) | SARADC_START_START_BITS_ENABLE;
|
||||
}
|
||||
|
||||
bool ADC_CheckEndOfConversion(ADC_CH_MASK Mask)
|
||||
{
|
||||
volatile ADC_Channel_t *pChannels = (volatile ADC_Channel_t *)&SARADC_CH0;
|
||||
uint8_t Channel = ADC_GetChannelNumber(Mask);
|
||||
|
||||
return (pChannels[Channel].STAT & ADC_CHx_STAT_EOC_MASK) >> ADC_CHx_STAT_EOC_SHIFT;
|
||||
}
|
||||
|
||||
uint16_t ADC_GetValue(ADC_CH_MASK Mask)
|
||||
{
|
||||
volatile ADC_Channel_t *pChannels = (volatile ADC_Channel_t *)&SARADC_CH0;
|
||||
uint8_t Channel = ADC_GetChannelNumber(Mask);
|
||||
|
||||
SARADC_IF = 1 << Channel; // TODO: Or just use 'Mask'
|
||||
|
||||
return (pChannels[Channel].DATA & ADC_CHx_DATA_DATA_MASK) >> ADC_CHx_DATA_DATA_SHIFT;
|
||||
}
|
||||
|
||||
|
@ -50,6 +50,9 @@ void ADC_Enable(void);
|
||||
void ADC_SoftReset(void);
|
||||
uint32_t ADC_GetClockConfig(void);
|
||||
void ADC_Configure(ADC_Config_t *pAdc);
|
||||
void ADC_Start(void);
|
||||
bool ADC_CheckEndOfConversion(ADC_CH_MASK Mask);
|
||||
uint16_t ADC_GetValue(ADC_CH_MASK Mask);
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -102,6 +102,8 @@ IF = 0x000C
|
||||
= NOT_SET, 0
|
||||
= SET, 1
|
||||
|
||||
CH0 = 0x0010
|
||||
|
||||
EXTTRIG_SEL = 0x00B0
|
||||
|
||||
CALIB_OFFSET = 0x00F0
|
||||
@ -116,3 +118,15 @@ CALIB_KD = 0x00F4
|
||||
= NO, 0
|
||||
= YES, 1
|
||||
|
||||
[ADC_CHx]
|
||||
$ = ADC_Channel_t
|
||||
|
||||
STAT = 0x0000
|
||||
> EOC, 0, 1
|
||||
= NOT_COMPLETE, 0
|
||||
= COMPLETE, 1
|
||||
|
||||
DATA = 0x0004
|
||||
> DATA, 0, 12
|
||||
> NUM, 12, 4
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user