mirror of
https://github.com/openshwprojects/OpenBK7231T_App.git
synced 2026-02-20 00:32:37 +01:00
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>
This commit is contained in:
committed by
GitHub
parent
abcf19a498
commit
aeafcb0863
@@ -12,7 +12,7 @@
|
||||
| BL602/LF686 | Bouffalo Lab | ✅ | ✅ | ✅⁴ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
|
||||
| W800/W801 | Winner Micro | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ |
|
||||
| W600/W601 | Winner Micro | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅⁶ | ❌ |
|
||||
| LN882H | Lightning Semi | ✅ | ✅ | ✅⁴ | ✅ | ❌ | ✅ | ❗️ | ❌ | ✅ | ✅ | ✅ |
|
||||
| LN882H | Lightning Semi | ✅ | ✅ | ✅⁴ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ |
|
||||
| ESP8266<br>ESP8285 | Espressif | ✅ | ⚠️¹³ | ✅²'⁴ | ✅ | ✅ | ✅⁷ | ❌ | ❗️ | ❓⁹ | ❌ | ❌ |
|
||||
| ESP32<br>-C2<br>-C3<br>-C5<br>-C6<br>-C61<br>-S2<br>-S3 | Espressif | ✅ | ⚠️¹³ | ✅⁴ | ✅ | ✅ | ✅ | ❓ | ✅¹⁰ | ✅ | ✅ | ❌ |
|
||||
| TR6260 | Transa Semi | ✅ | ❌ | ❗️³'⁴ | ✅ | ❌ | ✅⁸ | ❌ | ❌ | ✅⁹ | ❌ | ❌ |
|
||||
@@ -25,7 +25,7 @@
|
||||
| ECR6600 | ESWIN | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁸ | ❗️ | ❗️¹¹ | ✅ | ❌ | ❌ |
|
||||
| TXW81X | Taixin | ✅ | ❌ | ❗️ | ❓ | ❌ | ❌ | ❌ | ❌ | ❓ | ❌ | ❌ |
|
||||
| RDA5981 | RDA | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ➖ | ❌ |
|
||||
| LN8825B | Lightning Semi | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❓ |
|
||||
| LN8825B | Lightning Semi | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ❌ | ❓ |
|
||||
|
||||
|
||||
✅ - Works<br>
|
||||
|
||||
@@ -37,7 +37,6 @@ set(PROJ_ALL_SRC
|
||||
${OBKM_SRC_CXX}
|
||||
${BERRY_SRC_C}
|
||||
${PRO_DIR}/main.c
|
||||
${PRO_DIR}/usr_app.c
|
||||
${PRO_DIR}/bsp/serial_hw.c
|
||||
${PRO_DIR}/bsp/drv_adc_measure.c
|
||||
${PRO_DIR}/startup/startup_ln882x_gcc.c
|
||||
|
||||
@@ -25,8 +25,8 @@ set(PROJ_ALL_SRC
|
||||
${OBK_SRCS}hal/ln882h/hal_pins_ln882h.c
|
||||
${OBK_SRCS}hal/ln882h/hal_wifi_ln882h.c
|
||||
${OBK_SRCS}hal/ln882h/hal_ota_ln882h.c
|
||||
${OBK_SRCS}hal/ln882h/hal_uart_ln882h.c
|
||||
main.c
|
||||
usr_app.c
|
||||
bsp/serial_hw.c
|
||||
startup/startup_${CHIP_SERIAL}_gcc.c
|
||||
${MODULE_SRC}
|
||||
|
||||
Submodule sdk/OpenLN882H updated: becfd847d5...bec0c91134
Submodule sdk/OpenTR6260 updated: 3550c2c6f8...1254c05ed5
@@ -24,3 +24,8 @@ void __attribute__((weak)) HAL_Run_WDT()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void __attribute__((weak)) HAL_RegisterPlatformSpecificCommands()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@@ -3,3 +3,4 @@ void HAL_RebootModule();
|
||||
void HAL_Delay_us(int delay);
|
||||
void HAL_Configure_WDT();
|
||||
void HAL_Run_WDT();
|
||||
void HAL_RegisterPlatformSpecificCommands();
|
||||
|
||||
@@ -1,35 +1,161 @@
|
||||
#ifdef PLATFORM_LN882H
|
||||
//#include "../hal_adc.h"
|
||||
#include "hal_pinmap_ln882h.h"
|
||||
|
||||
#if PLATFORM_LN882H
|
||||
|
||||
#include "../hal_adc.h"
|
||||
#include "hal/hal_adc.h"
|
||||
|
||||
void HAL_ADC_Init(int pinNumber) {
|
||||
adc_init_t_def adc_init;
|
||||
void HAL_ADC_Init(int pinNumber)
|
||||
{
|
||||
adc_init_t_def adc_init = { 0 };
|
||||
|
||||
memset(&adc_init, 0, sizeof(adc_init_t_def));
|
||||
adc_init.adc_ch = ADC_CH0;
|
||||
adc_init.adc_conv_mode = ADC_CONV_MODE_CONTINUE;
|
||||
adc_init.adc_presc = 0xFF;
|
||||
hal_adc_init(ADC_BASE, &adc_init);
|
||||
|
||||
hal_adc_en(ADC_BASE, HAL_ENABLE);
|
||||
|
||||
hal_adc_start_conv(ADC_BASE);
|
||||
adc_init.adc_ch = ADC_CH0;
|
||||
adc_init.adc_conv_mode = ADC_CONV_MODE_CONTINUE;
|
||||
adc_init.adc_presc = 0xFF;
|
||||
if(pinNumber != 0xFF)
|
||||
{
|
||||
adc_init.adc_ov_smp_ratio = ADC_OVER_SAMPLING_RATIO_X8;
|
||||
adc_init.adc_ov_smp_ratio_en = ADC_OVER_SAMPLING_EN_STATUS_BIT0;
|
||||
}
|
||||
switch(pinNumber)
|
||||
{
|
||||
case 0:
|
||||
adc_init.adc_ch = ADC_CH2;
|
||||
hal_gpio_pin_mode_set(GPIOA_BASE, GPIO_PIN_0, GPIO_MODE_ANALOG);
|
||||
break;
|
||||
case 1:
|
||||
adc_init.adc_ch = ADC_CH3;
|
||||
hal_gpio_pin_mode_set(GPIOA_BASE, GPIO_PIN_1, GPIO_MODE_ANALOG);
|
||||
break;
|
||||
case 4:
|
||||
adc_init.adc_ch = ADC_CH4;
|
||||
hal_gpio_pin_mode_set(GPIOA_BASE, GPIO_PIN_4, GPIO_MODE_ANALOG);
|
||||
break;
|
||||
case 19:
|
||||
adc_init.adc_ch = ADC_CH5;
|
||||
hal_gpio_pin_mode_set(GPIOB_BASE, GPIO_PIN_3, GPIO_MODE_ANALOG);
|
||||
break;
|
||||
case 20:
|
||||
adc_init.adc_ch = ADC_CH6;
|
||||
hal_gpio_pin_mode_set(GPIOB_BASE, GPIO_PIN_4, GPIO_MODE_ANALOG);
|
||||
break;
|
||||
case 21:
|
||||
adc_init.adc_ch = ADC_CH7;
|
||||
hal_gpio_pin_mode_set(GPIOB_BASE, GPIO_PIN_5, GPIO_MODE_ANALOG);
|
||||
break;
|
||||
case 0xFF: break;
|
||||
default: return;
|
||||
}
|
||||
hal_adc_init(ADC_BASE, &adc_init);
|
||||
|
||||
hal_adc_en(ADC_BASE, HAL_ENABLE);
|
||||
}
|
||||
|
||||
int HAL_ADC_Read(int pinNumber) {
|
||||
adc_ch_t ch = ADC_CH0;
|
||||
uint16_t read_adc = 0;
|
||||
int HAL_ADC_Read(int pinNumber)
|
||||
{
|
||||
adc_ch_t ch;
|
||||
switch(pinNumber)
|
||||
{
|
||||
case 0: ch = ADC_CH2; break;
|
||||
case 1: ch = ADC_CH3; break;
|
||||
case 4: ch = ADC_CH4; break;
|
||||
case 19: ch = ADC_CH5; break;
|
||||
case 20: ch = ADC_CH6; break;
|
||||
case 21: ch = ADC_CH7; break;
|
||||
case 0xFF: ch = ADC_CH0; break;
|
||||
default: return 0;
|
||||
}
|
||||
uint16_t read_adc = 0;
|
||||
|
||||
while(hal_adc_get_conv_status(ADC_BASE, ch) == 0);
|
||||
|
||||
read_adc = hal_adc_get_data(ADC_BASE, ch);
|
||||
|
||||
hal_adc_clr_conv_status(ADC_BASE,ch);
|
||||
|
||||
return read_adc;
|
||||
hal_adc_start_conv(ADC_BASE);
|
||||
|
||||
while(hal_adc_get_conv_status(ADC_BASE, ch) == 0);
|
||||
|
||||
read_adc = hal_adc_get_data(ADC_BASE, ch);
|
||||
|
||||
hal_adc_clr_conv_status(ADC_BASE, ch);
|
||||
|
||||
return read_adc;
|
||||
}
|
||||
|
||||
void HAL_ADC_Deinit(int pinNumber)
|
||||
{
|
||||
switch(pinNumber)
|
||||
{
|
||||
case 0:
|
||||
hal_gpio_pin_mode_set(GPIOA_BASE, GPIO_PIN_0, GPIO_MODE_DIGITAL);
|
||||
break;
|
||||
case 1:
|
||||
hal_gpio_pin_mode_set(GPIOA_BASE, GPIO_PIN_1, GPIO_MODE_DIGITAL);
|
||||
break;
|
||||
case 4:
|
||||
hal_gpio_pin_mode_set(GPIOA_BASE, GPIO_PIN_4, GPIO_MODE_DIGITAL);
|
||||
break;
|
||||
case 19:
|
||||
hal_gpio_pin_mode_set(GPIOB_BASE, GPIO_PIN_3, GPIO_MODE_DIGITAL);
|
||||
break;
|
||||
case 20:
|
||||
hal_gpio_pin_mode_set(GPIOB_BASE, GPIO_PIN_4, GPIO_MODE_DIGITAL);
|
||||
break;
|
||||
case 21:
|
||||
hal_gpio_pin_mode_set(GPIOB_BASE, GPIO_PIN_5, GPIO_MODE_DIGITAL);
|
||||
break;
|
||||
default: return;
|
||||
}
|
||||
}
|
||||
|
||||
#endif // PLATFORM_LN882H
|
||||
|
||||
#if PLATFORM_LN8825
|
||||
|
||||
#include "hal/hal_adc.h"
|
||||
|
||||
void OBK_HAL_ADC_Init(int pinNumber)
|
||||
{
|
||||
// adc is already initialized for temp sensor
|
||||
//ADC_InitTypeDef adc_init_struct;
|
||||
//adc_init_struct.ADC_Autoff = FENABLE;
|
||||
//adc_init_struct.ADC_ContinuousConvMode = FDISABLE;
|
||||
//adc_init_struct.ADC_DataAlign = ADC_DataAlign_Right;
|
||||
//adc_init_struct.ADC_WaitMode = FDISABLE;
|
||||
//HAL_ADC_Init(ADC, &adc_init_struct);
|
||||
//HAL_ADC_PrescCfg(ADC, 42);
|
||||
HAL_SYSCON_GPIO_Digital_Analog_Select(pinNumber, GPIO_ANALOG_MOD);
|
||||
}
|
||||
|
||||
int HAL_ADC_Read(int pinNumber)
|
||||
{
|
||||
adc_chan_t ch;
|
||||
switch(pinNumber)
|
||||
{
|
||||
case 0: ch = EXTL_ADC_CHAN_0; break;
|
||||
case 1: ch = EXTL_ADC_CHAN_1; break;
|
||||
case 4: ch = EXTL_ADC_CHAN_2; break;
|
||||
case 19: ch = EXTL_ADC_CHAN_3; break;
|
||||
case 20: ch = EXTL_ADC_CHAN_4; break;
|
||||
case 21: ch = EXTL_ADC_CHAN_5; break;
|
||||
default: return 0;
|
||||
}
|
||||
uint16_t read_adc = 0;
|
||||
|
||||
HAL_ADC_SeqChanSelect_Cfg(ADC, ch);
|
||||
HAL_ADC_Cmd(ADC, FENABLE);
|
||||
HAL_ADC_SoftwareStartConvCmd(ADC);
|
||||
for(volatile uint32_t t = 0; t < 40 * 3; t++)
|
||||
{
|
||||
__NOP();
|
||||
}
|
||||
|
||||
read_adc = HAL_ADC_GetConversionValue(ADC, ch);
|
||||
HAL_ADC_StopConvCmd(ADC);
|
||||
HAL_ADC_Cmd(ADC, FDISABLE);
|
||||
|
||||
return read_adc;
|
||||
}
|
||||
|
||||
void HAL_ADC_Deinit(int pinNumber)
|
||||
{
|
||||
HAL_SYSCON_GPIO_Digital_Analog_Select(pinNumber, GPIO_DIGITAL_MOD);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -46,4 +46,35 @@ void HAL_Delay_us(int delay)
|
||||
ln_block_delayus(delay);
|
||||
}
|
||||
|
||||
#if PLATFORM_LN882H
|
||||
|
||||
#include "../../cmnds/cmd_public.h"
|
||||
|
||||
extern int g_urx_pin;
|
||||
extern int g_utx_pin;
|
||||
|
||||
static commandResult_t CMD_SetUARTPins(const void* context, const char* cmd, const char* args, int cmdFlags)
|
||||
{
|
||||
Tokenizer_TokenizeString(args, 0);
|
||||
|
||||
int rxpin = Tokenizer_GetPin(0, -1);
|
||||
int txpin = Tokenizer_GetPin(1, -1);
|
||||
if(rxpin == -1 || txpin == -1)
|
||||
return CMD_RES_BAD_ARGUMENT;
|
||||
g_urx_pin = rxpin;
|
||||
g_utx_pin = txpin;
|
||||
return CMD_RES_OK;
|
||||
}
|
||||
|
||||
void HAL_RegisterPlatformSpecificCommands()
|
||||
{
|
||||
//cmddetail:{"name":"alias","args":"[rx pin][tx pin]",
|
||||
//cmddetail:"descr":"Set UART pins",
|
||||
//cmddetail:"fn":"CMD_SetUARTPins","file":"hal/ln882h/hal_generic_ln882h.c","requires":"",
|
||||
//cmddetail:"examples":""}
|
||||
CMD_RegisterCommand("SetUARTPins", CMD_SetUARTPins, NULL);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#endif // PLATFORM_LN882H
|
||||
|
||||
@@ -1,7 +1,126 @@
|
||||
#ifdef PLATFORM_LN882H
|
||||
#if PLATFORM_LN882H || PLATFORM_LN8825
|
||||
|
||||
#include "../../new_common.h"
|
||||
#include "../../logging/logging.h"
|
||||
#include "../../quicktick.h"
|
||||
#include "osal/osal.h"
|
||||
#include "utils/debug/log.h"
|
||||
#include "wifi.h"
|
||||
#include "netif/ethernetif.h"
|
||||
#include "wifi_manager.h"
|
||||
#include "lwip/tcpip.h"
|
||||
#include "utils/system_parameter.h"
|
||||
#include "utils/sysparam_factory_setting.h"
|
||||
#include "hal/hal_adc.h"
|
||||
#include "ln_nvds.h"
|
||||
|
||||
#endif // PLATFORM_LN882H
|
||||
#define PM_DEFAULT_SLEEP_MODE (ACTIVE)
|
||||
|
||||
#define USR_APP_TASK_STACK_SIZE (10*256) //Byte
|
||||
|
||||
#if PLATFORM_LN882H
|
||||
#include "utils/debug/ln_assert.h"
|
||||
#include "utils/power_mgmt/ln_pm.h"
|
||||
#include "ln_wifi_err.h"
|
||||
#include "ln_misc.h"
|
||||
#include "ln882h.h"
|
||||
#include "../hal_adc.h"
|
||||
#define HAL_TEMP_ADC 0xFF
|
||||
#else
|
||||
#include "utils/debug/art_assert.h"
|
||||
#include "hal/hal_sleep.h"
|
||||
#define LN_ASSERT ART_ASSERT
|
||||
#define HAL_ADC_Init(x) drv_adc_init()
|
||||
#define HAL_ADC_Read(x) drv_adc_read(x)
|
||||
#define HAL_TEMP_ADC INTL_ADC_CHAN_0
|
||||
#define ln_pm_sleep_mode_set hal_sleep_set_mode
|
||||
#endif
|
||||
|
||||
static OS_Thread_t g_usr_app_thread;
|
||||
float g_wifi_temperature = 0.0f;
|
||||
|
||||
extern void Main_Init();
|
||||
extern void Main_OnEverySecond();
|
||||
|
||||
void usr_app_task_entry(void *params)
|
||||
{
|
||||
// from tuyaopen
|
||||
#if PLATFORM_LN882H
|
||||
*(volatile int*)(0x40012034) = 0x540;
|
||||
#endif
|
||||
wifi_manager_init();
|
||||
|
||||
int8_t cap_comp = 0;
|
||||
uint16_t adc_val = 0;
|
||||
|
||||
if(NVDS_ERR_OK == ln_nvds_get_xtal_comp_val((uint8_t*)&cap_comp))
|
||||
{
|
||||
if((uint8_t)cap_comp == 0xFF)
|
||||
{
|
||||
cap_comp = 0;
|
||||
}
|
||||
}
|
||||
|
||||
HAL_ADC_Init(HAL_TEMP_ADC);
|
||||
OS_MsDelay(1);
|
||||
wifi_temp_cal_init(HAL_ADC_Read(HAL_TEMP_ADC), cap_comp);
|
||||
|
||||
Main_Init();
|
||||
|
||||
while(1)
|
||||
{
|
||||
adc_val = HAL_ADC_Read(HAL_TEMP_ADC);
|
||||
wifi_do_temp_cal_period(adc_val);
|
||||
g_wifi_temperature = (25 + ((adc_val & 0xFFF) - 770) / 2.54f);
|
||||
OS_MsDelay(1000);
|
||||
Main_OnEverySecond();
|
||||
}
|
||||
}
|
||||
|
||||
void creat_usr_app_task(void)
|
||||
{
|
||||
ln_pm_sleep_mode_set(PM_DEFAULT_SLEEP_MODE);
|
||||
|
||||
#if PLATFORM_LN882H
|
||||
/**
|
||||
* CLK_G_EFUSE: For wifi temp calibration
|
||||
* CLK_G_BLE CLK_G_I2S CLK_G_WS2811 CLK_G_DBGH CLK_G_SDIO CLK_G_EFUSE CLK_G_AES
|
||||
*/
|
||||
ln_pm_always_clk_disable_select(CLK_G_BLE | CLK_G_I2S | CLK_G_WS2811 | CLK_G_SDIO | CLK_G_AES);
|
||||
|
||||
/**
|
||||
* ADC0: For wifi temp calibration
|
||||
* TIM3: For wifi pvtcmd evm test
|
||||
* CLK_G_ADC CLK_G_GPIOA CLK_G_GPIOB CLK_G_SPI0 CLK_G_SPI1 CLK_G_I2C0 CLK_G_UART1 CLK_G_UART2
|
||||
* CLK_G_WDT CLK_G_TIM_REG CLK_G_TIM1 CLK_G_TIM2 CLK_G_TIM3 CLK_G_TIM4 CLK_G_MAC CLK_G_DMA
|
||||
* CLK_G_RF CLK_G_ADV_TIMER CLK_G_TRNG
|
||||
*/
|
||||
ln_pm_lightsleep_clk_disable_select(CLK_G_GPIOA | CLK_G_GPIOB | CLK_G_SPI0 | CLK_G_SPI1 | CLK_G_I2C0 |
|
||||
CLK_G_UART1 | CLK_G_UART2 | CLK_G_WDT | CLK_G_TIM1 | CLK_G_TIM2 | CLK_G_MAC | CLK_G_DMA | CLK_G_RF | CLK_G_ADV_TIMER | CLK_G_TRNG);
|
||||
|
||||
|
||||
/* print sdk version */
|
||||
LOG(LOG_LVL_INFO, "LN882H SDK Ver: %s [build time:%s][0x%08x]\r\n",
|
||||
LN882H_SDK_VERSION_STRING, LN882H_SDK_BUILD_DATE_TIME, LN882H_SDK_VERSION);
|
||||
#else
|
||||
LOG(LOG_LVL_INFO, "SDK version string: %s\r\n", LN_SDK_VERSION_STRING);
|
||||
LOG(LOG_LVL_INFO, "SDK version number: 0x%08x\r\n", LN_SDK_VERSION);
|
||||
LOG(LOG_LVL_INFO, "SDK build time : %s\r\n", LN_SDK_BUILD_DATE_TIME);
|
||||
#endif
|
||||
|
||||
if(OS_OK != OS_ThreadCreate(&g_usr_app_thread, "OBK", usr_app_task_entry, NULL, OS_PRIORITY_BELOW_NORMAL, USR_APP_TASK_STACK_SIZE))
|
||||
{
|
||||
LN_ASSERT(1);
|
||||
}
|
||||
}
|
||||
|
||||
__attribute__((weak))
|
||||
void* os_malloc(size_t size)
|
||||
{
|
||||
return OS_Malloc(size);
|
||||
}
|
||||
|
||||
__attribute__((weak))
|
||||
void os_free(void* ptr)
|
||||
{
|
||||
OS_Free(ptr);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -24,66 +24,66 @@ OBKInterruptType g_modes[PLATFORM_GPIO_MAX];
|
||||
#if PLATFORM_LN882H
|
||||
|
||||
lnPinMapping_t g_pins[] = {
|
||||
{ "A0", GPIOA_BASE, GPIO_PIN_0, -1 },
|
||||
{ "A1", GPIOA_BASE, GPIO_PIN_1, -1 },
|
||||
{ "A2", GPIOA_BASE, GPIO_PIN_2, -1 },
|
||||
{ "A3", GPIOA_BASE, GPIO_PIN_3, -1 },
|
||||
{ "A4", GPIOA_BASE, GPIO_PIN_4, -1 },
|
||||
{ "A5", GPIOA_BASE, GPIO_PIN_5, -1 },
|
||||
{ "A6", GPIOA_BASE, GPIO_PIN_6, -1 },
|
||||
{ "A7", GPIOA_BASE, GPIO_PIN_7, -1 },
|
||||
{ "A8", GPIOA_BASE, GPIO_PIN_8, -1 },
|
||||
{ "A9", GPIOA_BASE, GPIO_PIN_9, -1 },
|
||||
{ "A10", GPIOA_BASE, GPIO_PIN_10, -1 },
|
||||
{ "A11", GPIOA_BASE, GPIO_PIN_11, -1 },
|
||||
{ "A12", GPIOA_BASE, GPIO_PIN_12, -1 },
|
||||
{ "A13", GPIOA_BASE, GPIO_PIN_13, -1 },
|
||||
{ "A14", GPIOA_BASE, GPIO_PIN_14, -1 },
|
||||
{ "A15", GPIOA_BASE, GPIO_PIN_15, -1 },
|
||||
{ "A0 (ADC2)", GPIOA_BASE, GPIO_PIN_0, -1 },
|
||||
{ "A1 (ADC3)", GPIOA_BASE, GPIO_PIN_1, -1 },
|
||||
{ "A2", GPIOA_BASE, GPIO_PIN_2, -1 },
|
||||
{ "A3", GPIOA_BASE, GPIO_PIN_3, -1 },
|
||||
{ "A4 (ADC4)", GPIOA_BASE, GPIO_PIN_4, -1 },
|
||||
{ "A5", GPIOA_BASE, GPIO_PIN_5, -1 },
|
||||
{ "A6", GPIOA_BASE, GPIO_PIN_6, -1 },
|
||||
{ "A7", GPIOA_BASE, GPIO_PIN_7, -1 },
|
||||
{ "A8", GPIOA_BASE, GPIO_PIN_8, -1 },
|
||||
{ "A9", GPIOA_BASE, GPIO_PIN_9, -1 },
|
||||
{ "A10", GPIOA_BASE, GPIO_PIN_10, -1 },
|
||||
{ "A11", GPIOA_BASE, GPIO_PIN_11, -1 },
|
||||
{ "A12", GPIOA_BASE, GPIO_PIN_12, -1 },
|
||||
{ "A13", GPIOA_BASE, GPIO_PIN_13, -1 },
|
||||
{ "A14", GPIOA_BASE, GPIO_PIN_14, -1 },
|
||||
{ "A15", GPIOA_BASE, GPIO_PIN_15, -1 },
|
||||
// port B
|
||||
{ "B0", GPIOB_BASE, GPIO_PIN_0, -1 }, // 16
|
||||
{ "B1", GPIOB_BASE, GPIO_PIN_1, -1 }, // 17
|
||||
{ "B2", GPIOB_BASE, GPIO_PIN_2, -1 }, // 18
|
||||
{ "B3", GPIOB_BASE, GPIO_PIN_3, -1 }, // 19
|
||||
{ "B4", GPIOB_BASE, GPIO_PIN_4, -1 }, // 20
|
||||
{ "B5", GPIOB_BASE, GPIO_PIN_5, -1 }, // 21
|
||||
{ "B6", GPIOB_BASE, GPIO_PIN_6, -1 }, // 22
|
||||
{ "B7", GPIOB_BASE, GPIO_PIN_7, -1 }, // 23
|
||||
{ "B8", GPIOB_BASE, GPIO_PIN_8, -1 }, // 24
|
||||
{ "B9", GPIOB_BASE, GPIO_PIN_9, -1 }, // 25
|
||||
{ "B0", GPIOB_BASE, GPIO_PIN_0, -1 }, // 16
|
||||
{ "B1", GPIOB_BASE, GPIO_PIN_1, -1 }, // 17
|
||||
{ "B2", GPIOB_BASE, GPIO_PIN_2, -1 }, // 18
|
||||
{ "B3 (ADC5)", GPIOB_BASE, GPIO_PIN_3, -1 }, // 19
|
||||
{ "B4 (ADC6)", GPIOB_BASE, GPIO_PIN_4, -1 }, // 20
|
||||
{ "B5 (ADC7)", GPIOB_BASE, GPIO_PIN_5, -1 }, // 21
|
||||
{ "B6", GPIOB_BASE, GPIO_PIN_6, -1 }, // 22
|
||||
{ "B7", GPIOB_BASE, GPIO_PIN_7, -1 }, // 23
|
||||
{ "B8", GPIOB_BASE, GPIO_PIN_8, -1 }, // 24
|
||||
{ "B9", GPIOB_BASE, GPIO_PIN_9, -1 }, // 25
|
||||
// ETC TODO
|
||||
};
|
||||
|
||||
#else
|
||||
|
||||
lnPinMapping_t g_pins[] = {
|
||||
{ "A0", GPIOA_0, -1 },
|
||||
{ "A1", GPIOA_1, -1 },
|
||||
{ "A2", GPIOA_2, -1 },
|
||||
{ "A3", GPIOA_3, -1 },
|
||||
{ "A4", GPIOA_4, -1 },
|
||||
{ "A5", GPIOA_5, -1 },
|
||||
{ "A6", GPIOA_6, -1 },
|
||||
{ "A7", GPIOA_7, -1 },
|
||||
{ "A8", GPIOA_8, -1 },
|
||||
{ "A9", GPIOA_9, -1 },
|
||||
{ "A10", GPIOA_10, -1 },
|
||||
{ "A11", GPIOA_11, -1 },
|
||||
{ "A12", GPIOA_12, -1 },
|
||||
{ "A13", GPIOA_13, -1 },
|
||||
{ "A14", GPIOA_14, -1 },
|
||||
{ "A15", GPIOA_15, -1 },
|
||||
{ "A0 (ADC0)", GPIOA_0, -1 },
|
||||
{ "A1 (ADC1)", GPIOA_1, -1 },
|
||||
{ "A2", GPIOA_2, -1 },
|
||||
{ "A3", GPIOA_3, -1 },
|
||||
{ "A4 (ADC2)", GPIOA_4, -1 },
|
||||
{ "A5", GPIOA_5, -1 },
|
||||
{ "A6", GPIOA_6, -1 },
|
||||
{ "A7", GPIOA_7, -1 },
|
||||
{ "A8", GPIOA_8, -1 },
|
||||
{ "A9", GPIOA_9, -1 },
|
||||
{ "A10", GPIOA_10, -1 },
|
||||
{ "A11", GPIOA_11, -1 },
|
||||
{ "A12", GPIOA_12, -1 },
|
||||
{ "A13", GPIOA_13, -1 },
|
||||
{ "A14", GPIOA_14, -1 },
|
||||
{ "A15", GPIOA_15, -1 },
|
||||
// port B
|
||||
{ "B0", GPIOB_0, -1 }, // 16
|
||||
{ "B1", GPIOB_1, -1 }, // 17
|
||||
{ "B2", GPIOB_2, -1 }, // 18
|
||||
{ "B3", GPIOB_3, -1 }, // 19
|
||||
{ "B4", GPIOB_4, -1 }, // 20
|
||||
{ "B5", GPIOB_5, -1 }, // 21
|
||||
{ "B6", GPIOB_6, -1 }, // 22
|
||||
{ "B7", GPIOB_7, -1 }, // 23
|
||||
{ "B8", GPIOB_8, -1 }, // 24
|
||||
{ "B9", GPIOB_9, -1 }, // 25
|
||||
{ "B0", GPIOB_0, -1 }, // 16
|
||||
{ "B1", GPIOB_1, -1 }, // 17
|
||||
{ "B2", GPIOB_2, -1 }, // 18
|
||||
{ "B3 (ADC3)", GPIOB_3, -1 }, // 19
|
||||
{ "B4 (ADC4)", GPIOB_4, -1 }, // 20
|
||||
{ "B5 (ADC5)", GPIOB_5, -1 }, // 21
|
||||
{ "B6", GPIOB_6, -1 }, // 22
|
||||
{ "B7", GPIOB_7, -1 }, // 23
|
||||
{ "B8", GPIOB_8, -1 }, // 24
|
||||
{ "B9", GPIOB_9, -1 }, // 25
|
||||
// ETC TODO
|
||||
};
|
||||
|
||||
|
||||
77
src/hal/ln882h/hal_uart_ln882h.c
Normal file
77
src/hal/ln882h/hal_uart_ln882h.c
Normal file
@@ -0,0 +1,77 @@
|
||||
#ifdef PLATFORM_LN882H
|
||||
|
||||
#include "../../new_pins.h"
|
||||
#include "../../new_cfg.h"
|
||||
#include "../hal_uart.h"
|
||||
#include "hal/hal_uart.h"
|
||||
#include "serial.h"
|
||||
#include "serial_hw.h"
|
||||
#include "hal/hal_misc.h"
|
||||
#include "hal_pinmap_ln882h.h"
|
||||
|
||||
static bool isInitialized;
|
||||
int g_urx_pin = 3;
|
||||
int g_utx_pin = 2;
|
||||
|
||||
void HAL_UART_SendByte(byte b)
|
||||
{
|
||||
while(!hal_uart_flag_get(UART2_BASE, USART_FLAG_TXE));
|
||||
hal_uart_send_data(UART2_BASE, b);
|
||||
}
|
||||
|
||||
int HAL_UART_Init(int baud, int parity, bool hwflowc, int txOverride, int rxOverride)
|
||||
{
|
||||
if(isInitialized)
|
||||
{
|
||||
hal_misc_reset_uart2();
|
||||
NVIC_ClearPendingIRQ(UART2_IRQn);
|
||||
NVIC_DisableIRQ(UART2_IRQn);
|
||||
}
|
||||
|
||||
uart_init_t_def uart_init_struct;
|
||||
uart_init_struct.baudrate = baud;
|
||||
uart_init_struct.word_len = UART_WORD_LEN_8;
|
||||
uart_init_struct.stop_bits = UART_STOP_BITS_1;
|
||||
uart_init_struct.over_sampl = UART_OVER_SAMPL_8;
|
||||
switch(parity)
|
||||
{
|
||||
case 1: uart_init_struct.parity = UART_PARITY_ODD; break;
|
||||
case 2: uart_init_struct.parity = UART_PARITY_EVEN; break;
|
||||
default: uart_init_struct.parity = UART_PARITY_NONE; break;
|
||||
}
|
||||
|
||||
uint32_t rxbase = g_pins[g_urx_pin].base;
|
||||
uint32_t txbase = g_pins[g_utx_pin].base;
|
||||
gpio_pin_t rxpin = g_pins[g_urx_pin].pin;
|
||||
gpio_pin_t txpin = g_pins[g_utx_pin].pin;
|
||||
|
||||
hal_gpio_pin_afio_select(txbase, txpin, UART2_TX);
|
||||
hal_gpio_pin_afio_select(rxbase, rxpin, UART2_RX);
|
||||
hal_gpio_pin_afio_en(txbase, txpin, HAL_ENABLE);
|
||||
hal_gpio_pin_afio_en(rxbase, rxpin, HAL_ENABLE);
|
||||
|
||||
hal_uart_init(UART2_BASE, &uart_init_struct);
|
||||
hal_uart_rx_mode_en(UART2_BASE, HAL_ENABLE);
|
||||
hal_uart_tx_mode_en(UART2_BASE, HAL_ENABLE);
|
||||
hal_uart_en(UART2_BASE, HAL_ENABLE);
|
||||
|
||||
NVIC_SetPriority(UART2_IRQn, 4);
|
||||
NVIC_EnableIRQ(UART2_IRQn);
|
||||
hal_uart_it_en(UART2_BASE, USART_IT_RXNE);
|
||||
|
||||
isInitialized = true;
|
||||
return 1;
|
||||
}
|
||||
|
||||
void UART2_IRQHandler(void)
|
||||
{
|
||||
if(isInitialized)
|
||||
{
|
||||
if(hal_uart_flag_get(UART2_BASE, USART_FLAG_RXNE) == 1 && hal_uart_it_en_status_get(UART2_BASE, USART_IT_RXNE))
|
||||
{
|
||||
UART_AppendByteToReceiveRingBuffer(hal_uart_recv_data(UART2_BASE));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -348,10 +348,10 @@ void HAL_PIN_PWM_Update(int index, float value)
|
||||
return;
|
||||
int ch = PIN_GetPWMIndexForPinIndex(index);
|
||||
if(ch < 0) return;
|
||||
if(value < 0.1)
|
||||
value = 0.1;
|
||||
if(value >= 100)
|
||||
value = 99.9;
|
||||
//if(value < 0.1)
|
||||
// value = 0.1;
|
||||
//if(value >= 100)
|
||||
// value = 99.9;
|
||||
pwm_config(ch, g_pins[index].freq, (uint32_t)(value * 10));
|
||||
pwm_start(ch);
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
#elif PLATFORM_BL602 || PLATFORM_ESPIDF || PLATFORM_XRADIO || PLATFORM_ESP8266 || PLATFORM_TXW81X || PLATFORM_RDA5981
|
||||
#define os_free free
|
||||
#define os_malloc malloc
|
||||
#elif PLATFORM_REALTEK || PLATFORM_W800 || PLATFORM_W600 || PLATFORM_LN882H
|
||||
#elif PLATFORM_REALTEK || PLATFORM_W800 || PLATFORM_W600 || PLATFORM_LN882H || PLATFORM_LN8825
|
||||
extern void* pvPortMalloc(size_t xWantedSize);
|
||||
extern void vPortFree(void* pv);
|
||||
#define os_malloc pvPortMalloc
|
||||
|
||||
@@ -171,6 +171,47 @@ commandResult_t log_port(const void* context, const char* cmd, const char* args,
|
||||
|
||||
return CMD_RES_OK;
|
||||
}
|
||||
#elif PLATFORM_LN882H
|
||||
#include "serial_hw.h"
|
||||
#include "ln_kv_api.h"
|
||||
#define KV_LOG_PORT "logport"
|
||||
commandResult_t log_port(const void* context, const char* cmd, const char* args, int cmdFlags)
|
||||
{
|
||||
int idx;
|
||||
|
||||
Tokenizer_TokenizeString(args, 0);
|
||||
|
||||
// following check must be done after 'Tokenizer_TokenizeString',
|
||||
// so we know arguments count in Tokenizer. 'cmd' argument is
|
||||
// only for warning display
|
||||
if(Tokenizer_CheckArgsCountAndPrintWarning(cmd, 1))
|
||||
{
|
||||
return CMD_RES_NOT_ENOUGH_ARGUMENTS;
|
||||
}
|
||||
|
||||
serial_port_id_t port;
|
||||
idx = Tokenizer_GetArgInteger(0);
|
||||
switch(idx)
|
||||
{
|
||||
case 0:
|
||||
port = SER_PORT_UART0;
|
||||
break;
|
||||
case 1:
|
||||
port = SER_PORT_UART1;
|
||||
break;
|
||||
//case 2:
|
||||
// port = SER_PORT_UART2;
|
||||
// break;
|
||||
default:
|
||||
return CMD_RES_BAD_ARGUMENT;
|
||||
}
|
||||
|
||||
ln_kv_set(KV_LOG_PORT, &port, sizeof(serial_port_id_t));
|
||||
log_deinit();
|
||||
log_init();
|
||||
|
||||
return CMD_RES_OK;
|
||||
}
|
||||
#endif
|
||||
|
||||
// Here is how you can get log print on UART1:
|
||||
@@ -213,7 +254,7 @@ static void initLog(void)
|
||||
//cmddetail:"fn":"log_command","file":"logging/logging.c","requires":"",
|
||||
//cmddetail:"examples":""}
|
||||
CMD_RegisterCommand("logdelay", log_command, NULL);
|
||||
#if PLATFORM_BEKEN
|
||||
#if PLATFORM_BEKEN || PLATFORM_LN882H
|
||||
//cmddetail:{"name":"logport","args":"[Index]",
|
||||
//cmddetail:"descr":"Allows you to change log output port. On Beken, the UART1 is used for flashing and for TuyaMCU/BL0942, while UART2 is for log. Sometimes it might be easier for you to have log on UART1, so now you can just use this command like backlog uartInit 115200; logport 1 to enable logging on UART1..",
|
||||
//cmddetail:"fn":"log_port","file":"logging/logging.c","requires":"",
|
||||
|
||||
@@ -2447,6 +2447,11 @@ void MQTT_QueuePublishWithCommand(const char* topic, const char* channel, const
|
||||
|
||||
if (newItem == NULL) {
|
||||
newItem = os_malloc(sizeof(MqttPublishItem_t));
|
||||
if(newItem == NULL)
|
||||
{
|
||||
//addLogAdv(LOG_ERROR, LOG_FEATURE_MQTT, "os_malloc failed for MqttPublishItem_t");
|
||||
return;
|
||||
}
|
||||
newItem->next = NULL;
|
||||
get_queue_tail(g_MqttPublishQueueHead)->next = newItem; //Append new item
|
||||
}
|
||||
|
||||
@@ -572,6 +572,7 @@ OSStatus rtos_suspend_thread(beken_thread_t* thread);
|
||||
#define hal_flash_read FLASH_Read
|
||||
#define hal_flash_program FLASH_Program
|
||||
#define hal_flash_erase FLASH_Erase
|
||||
#define HAL_ADC_Init OBK_HAL_ADC_Init
|
||||
#define OBK_OTA_EXTENSION ".img"
|
||||
#define OBK_OTA_NAME_EXTENSION "_ota"
|
||||
#else
|
||||
|
||||
@@ -393,6 +393,7 @@
|
||||
#define ENABLE_NTP 1
|
||||
//#define ENABLE_TIME_DST 1
|
||||
#define ENABLE_DRIVER_BL0937 1
|
||||
#define ENABLE_DRIVER_BL0942 1
|
||||
#define ENABLE_DRIVER_LED 1
|
||||
#define ENABLE_DRIVER_WEMO 1
|
||||
#define ENABLE_DRIVER_HUE 1
|
||||
@@ -407,10 +408,11 @@
|
||||
#define ENABLE_OBK_SCRIPTING 1
|
||||
#define ENABLE_DRIVER_SSDP 1
|
||||
#define ENABLE_ADVANCED_CHANNELTYPES_DISCOVERY 1
|
||||
#define ENABLE_OBK_BERRY 1
|
||||
//#define ENABLE_OBK_BERRY 1
|
||||
#define ENABLE_DRIVER_SM16703P 1
|
||||
#define ENABLE_DRIVER_PIXELANIM 1
|
||||
#define ENABLE_DRIVER_IRREMOTEESP 1
|
||||
#define ENABLE_DRIVER_TUYAMCU 1
|
||||
|
||||
#elif PLATFORM_ESPIDF
|
||||
|
||||
|
||||
@@ -1359,6 +1359,8 @@ void Main_Init_BeforeDelay_Unsafe(bool bAutoRunScripts) {
|
||||
CMD_Init_Early();
|
||||
#if WINDOWS
|
||||
CMD_InitSimulatorOnlyCommands();
|
||||
#else
|
||||
HAL_RegisterPlatformSpecificCommands();
|
||||
#endif
|
||||
|
||||
/* Automatic disable of PIN MONITOR after reboot */
|
||||
|
||||
Reference in New Issue
Block a user