Skip to content

Commit aeafcb0

Browse files
LN882H ADC (#1963)
* LN882H ADC * Unify 882H and 8825 main. 8825 adc * fix * disable adc reinit on 8825 * allow log port change, basic uart, disable berry * Use UART2 instead of UART0, and allow changing UART pins * fix * tr6260 pwm duty 0 * import from tuya --------- Co-authored-by: openshwprojects <85486843+openshwprojects@users.noreply.github.com>
1 parent abcf19a commit aeafcb0

File tree

19 files changed

+504
-95
lines changed

19 files changed

+504
-95
lines changed

docs/platforms.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
| BL602/LF686 | Bouffalo Lab ||| ✅⁴ |||||||||
1313
| W800/W801 | Winner Micro ||||||||||||
1414
| W600/W601 | Winner Micro |||||||||| ✅⁶ ||
15-
| LN882H | Lightning Semi ||| ✅⁴ || || ❗️ |||||
15+
| LN882H | Lightning Semi ||| ✅⁴ || || |||||
1616
| ESP8266<br>ESP8285 | Espressif || ⚠️¹³ | ✅²'⁴ ||| ✅⁷ || ❗️ | ❓⁹ |||
1717
| ESP32<br>-C2<br>-C3<br>-C5<br>-C6<br>-C61<br>-S2<br>-S3 | Espressif || ⚠️¹³ | ✅⁴ ||||| ✅¹⁰ ||||
1818
| TR6260 | Transa Semi ||| ❗️³'⁴ ||| ✅⁸ ||| ✅⁹ |||
@@ -25,7 +25,7 @@
2525
| ECR6600 | ESWIN |||||| ✅⁸ | ❗️ | ❗️¹¹ ||||
2626
| TXW81X | Taixin ||| ❗️ |||||||||
2727
| RDA5981 | RDA ||||||||||||
28-
| LN8825B | Lightning Semi ||||||| |||||
28+
| LN8825B | Lightning Semi ||||||| |||||
2929

3030

3131
✅ - Works<br>

platforms/LN8825/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ set(PROJ_ALL_SRC
3737
${OBKM_SRC_CXX}
3838
${BERRY_SRC_C}
3939
${PRO_DIR}/main.c
40-
${PRO_DIR}/usr_app.c
4140
${PRO_DIR}/bsp/serial_hw.c
4241
${PRO_DIR}/bsp/drv_adc_measure.c
4342
${PRO_DIR}/startup/startup_ln882x_gcc.c

platforms/LN882H/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ set(PROJ_ALL_SRC
2525
${OBK_SRCS}hal/ln882h/hal_pins_ln882h.c
2626
${OBK_SRCS}hal/ln882h/hal_wifi_ln882h.c
2727
${OBK_SRCS}hal/ln882h/hal_ota_ln882h.c
28+
${OBK_SRCS}hal/ln882h/hal_uart_ln882h.c
2829
main.c
29-
usr_app.c
3030
bsp/serial_hw.c
3131
startup/startup_${CHIP_SERIAL}_gcc.c
3232
${MODULE_SRC}

sdk/OpenTR6260

src/hal/generic/hal_generic.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,8 @@ void __attribute__((weak)) HAL_Run_WDT()
2424
{
2525

2626
}
27+
28+
void __attribute__((weak)) HAL_RegisterPlatformSpecificCommands()
29+
{
30+
31+
}

src/hal/hal_generic.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ void HAL_RebootModule();
33
void HAL_Delay_us(int delay);
44
void HAL_Configure_WDT();
55
void HAL_Run_WDT();
6+
void HAL_RegisterPlatformSpecificCommands();

src/hal/ln882h/hal_adc_ln882h.c

Lines changed: 151 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,161 @@
1-
#ifdef PLATFORM_LN882H
1+
//#include "../hal_adc.h"
2+
#include "hal_pinmap_ln882h.h"
3+
4+
#if PLATFORM_LN882H
25

3-
#include "../hal_adc.h"
46
#include "hal/hal_adc.h"
57

6-
void HAL_ADC_Init(int pinNumber) {
7-
adc_init_t_def adc_init;
8-
9-
memset(&adc_init, 0, sizeof(adc_init_t_def));
10-
adc_init.adc_ch = ADC_CH0;
11-
adc_init.adc_conv_mode = ADC_CONV_MODE_CONTINUE;
12-
adc_init.adc_presc = 0xFF;
13-
hal_adc_init(ADC_BASE, &adc_init);
14-
15-
hal_adc_en(ADC_BASE, HAL_ENABLE);
16-
17-
hal_adc_start_conv(ADC_BASE);
8+
void HAL_ADC_Init(int pinNumber)
9+
{
10+
adc_init_t_def adc_init = { 0 };
11+
12+
adc_init.adc_ch = ADC_CH0;
13+
adc_init.adc_conv_mode = ADC_CONV_MODE_CONTINUE;
14+
adc_init.adc_presc = 0xFF;
15+
if(pinNumber != 0xFF)
16+
{
17+
adc_init.adc_ov_smp_ratio = ADC_OVER_SAMPLING_RATIO_X8;
18+
adc_init.adc_ov_smp_ratio_en = ADC_OVER_SAMPLING_EN_STATUS_BIT0;
19+
}
20+
switch(pinNumber)
21+
{
22+
case 0:
23+
adc_init.adc_ch = ADC_CH2;
24+
hal_gpio_pin_mode_set(GPIOA_BASE, GPIO_PIN_0, GPIO_MODE_ANALOG);
25+
break;
26+
case 1:
27+
adc_init.adc_ch = ADC_CH3;
28+
hal_gpio_pin_mode_set(GPIOA_BASE, GPIO_PIN_1, GPIO_MODE_ANALOG);
29+
break;
30+
case 4:
31+
adc_init.adc_ch = ADC_CH4;
32+
hal_gpio_pin_mode_set(GPIOA_BASE, GPIO_PIN_4, GPIO_MODE_ANALOG);
33+
break;
34+
case 19:
35+
adc_init.adc_ch = ADC_CH5;
36+
hal_gpio_pin_mode_set(GPIOB_BASE, GPIO_PIN_3, GPIO_MODE_ANALOG);
37+
break;
38+
case 20:
39+
adc_init.adc_ch = ADC_CH6;
40+
hal_gpio_pin_mode_set(GPIOB_BASE, GPIO_PIN_4, GPIO_MODE_ANALOG);
41+
break;
42+
case 21:
43+
adc_init.adc_ch = ADC_CH7;
44+
hal_gpio_pin_mode_set(GPIOB_BASE, GPIO_PIN_5, GPIO_MODE_ANALOG);
45+
break;
46+
case 0xFF: break;
47+
default: return;
48+
}
49+
hal_adc_init(ADC_BASE, &adc_init);
50+
51+
hal_adc_en(ADC_BASE, HAL_ENABLE);
1852
}
1953

20-
int HAL_ADC_Read(int pinNumber) {
21-
adc_ch_t ch = ADC_CH0;
22-
uint16_t read_adc = 0;
23-
24-
while(hal_adc_get_conv_status(ADC_BASE, ch) == 0);
25-
26-
read_adc = hal_adc_get_data(ADC_BASE, ch);
27-
28-
hal_adc_clr_conv_status(ADC_BASE,ch);
29-
30-
return read_adc;
54+
int HAL_ADC_Read(int pinNumber)
55+
{
56+
adc_ch_t ch;
57+
switch(pinNumber)
58+
{
59+
case 0: ch = ADC_CH2; break;
60+
case 1: ch = ADC_CH3; break;
61+
case 4: ch = ADC_CH4; break;
62+
case 19: ch = ADC_CH5; break;
63+
case 20: ch = ADC_CH6; break;
64+
case 21: ch = ADC_CH7; break;
65+
case 0xFF: ch = ADC_CH0; break;
66+
default: return 0;
67+
}
68+
uint16_t read_adc = 0;
69+
70+
hal_adc_start_conv(ADC_BASE);
71+
72+
while(hal_adc_get_conv_status(ADC_BASE, ch) == 0);
73+
74+
read_adc = hal_adc_get_data(ADC_BASE, ch);
75+
76+
hal_adc_clr_conv_status(ADC_BASE, ch);
77+
78+
return read_adc;
3179
}
3280

81+
void HAL_ADC_Deinit(int pinNumber)
82+
{
83+
switch(pinNumber)
84+
{
85+
case 0:
86+
hal_gpio_pin_mode_set(GPIOA_BASE, GPIO_PIN_0, GPIO_MODE_DIGITAL);
87+
break;
88+
case 1:
89+
hal_gpio_pin_mode_set(GPIOA_BASE, GPIO_PIN_1, GPIO_MODE_DIGITAL);
90+
break;
91+
case 4:
92+
hal_gpio_pin_mode_set(GPIOA_BASE, GPIO_PIN_4, GPIO_MODE_DIGITAL);
93+
break;
94+
case 19:
95+
hal_gpio_pin_mode_set(GPIOB_BASE, GPIO_PIN_3, GPIO_MODE_DIGITAL);
96+
break;
97+
case 20:
98+
hal_gpio_pin_mode_set(GPIOB_BASE, GPIO_PIN_4, GPIO_MODE_DIGITAL);
99+
break;
100+
case 21:
101+
hal_gpio_pin_mode_set(GPIOB_BASE, GPIO_PIN_5, GPIO_MODE_DIGITAL);
102+
break;
103+
default: return;
104+
}
105+
}
33106

34107
#endif // PLATFORM_LN882H
35108

109+
#if PLATFORM_LN8825
110+
111+
#include "hal/hal_adc.h"
112+
113+
void OBK_HAL_ADC_Init(int pinNumber)
114+
{
115+
// adc is already initialized for temp sensor
116+
//ADC_InitTypeDef adc_init_struct;
117+
//adc_init_struct.ADC_Autoff = FENABLE;
118+
//adc_init_struct.ADC_ContinuousConvMode = FDISABLE;
119+
//adc_init_struct.ADC_DataAlign = ADC_DataAlign_Right;
120+
//adc_init_struct.ADC_WaitMode = FDISABLE;
121+
//HAL_ADC_Init(ADC, &adc_init_struct);
122+
//HAL_ADC_PrescCfg(ADC, 42);
123+
HAL_SYSCON_GPIO_Digital_Analog_Select(pinNumber, GPIO_ANALOG_MOD);
124+
}
125+
126+
int HAL_ADC_Read(int pinNumber)
127+
{
128+
adc_chan_t ch;
129+
switch(pinNumber)
130+
{
131+
case 0: ch = EXTL_ADC_CHAN_0; break;
132+
case 1: ch = EXTL_ADC_CHAN_1; break;
133+
case 4: ch = EXTL_ADC_CHAN_2; break;
134+
case 19: ch = EXTL_ADC_CHAN_3; break;
135+
case 20: ch = EXTL_ADC_CHAN_4; break;
136+
case 21: ch = EXTL_ADC_CHAN_5; break;
137+
default: return 0;
138+
}
139+
uint16_t read_adc = 0;
140+
141+
HAL_ADC_SeqChanSelect_Cfg(ADC, ch);
142+
HAL_ADC_Cmd(ADC, FENABLE);
143+
HAL_ADC_SoftwareStartConvCmd(ADC);
144+
for(volatile uint32_t t = 0; t < 40 * 3; t++)
145+
{
146+
__NOP();
147+
}
148+
149+
read_adc = HAL_ADC_GetConversionValue(ADC, ch);
150+
HAL_ADC_StopConvCmd(ADC);
151+
HAL_ADC_Cmd(ADC, FDISABLE);
152+
153+
return read_adc;
154+
}
155+
156+
void HAL_ADC_Deinit(int pinNumber)
157+
{
158+
HAL_SYSCON_GPIO_Digital_Analog_Select(pinNumber, GPIO_DIGITAL_MOD);
159+
}
160+
161+
#endif

src/hal/ln882h/hal_generic_ln882h.c

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,35 @@ void HAL_Delay_us(int delay)
4646
ln_block_delayus(delay);
4747
}
4848

49+
#if PLATFORM_LN882H
50+
51+
#include "../../cmnds/cmd_public.h"
52+
53+
extern int g_urx_pin;
54+
extern int g_utx_pin;
55+
56+
static commandResult_t CMD_SetUARTPins(const void* context, const char* cmd, const char* args, int cmdFlags)
57+
{
58+
Tokenizer_TokenizeString(args, 0);
59+
60+
int rxpin = Tokenizer_GetPin(0, -1);
61+
int txpin = Tokenizer_GetPin(1, -1);
62+
if(rxpin == -1 || txpin == -1)
63+
return CMD_RES_BAD_ARGUMENT;
64+
g_urx_pin = rxpin;
65+
g_utx_pin = txpin;
66+
return CMD_RES_OK;
67+
}
68+
69+
void HAL_RegisterPlatformSpecificCommands()
70+
{
71+
//cmddetail:{"name":"alias","args":"[rx pin][tx pin]",
72+
//cmddetail:"descr":"Set UART pins",
73+
//cmddetail:"fn":"CMD_SetUARTPins","file":"hal/ln882h/hal_generic_ln882h.c","requires":"",
74+
//cmddetail:"examples":""}
75+
CMD_RegisterCommand("SetUARTPins", CMD_SetUARTPins, NULL);
76+
}
77+
78+
#endif
79+
4980
#endif // PLATFORM_LN882H

0 commit comments

Comments
 (0)