MC20 OpenCPU开发记录

MC20 OpenCPU开发笔记

OpenCPU软件体系结构

在这里插入图片描述

资源

32-bit ARM7EJ-STMRISC 260MHz

4MB flash

4MB RAM

串口

提供两个UART端口:MAIN UART、DEBUG UART。分别命名为UART1和UART2。

UART1是9-pin串行接口。UART2是3-wire接口,具有调试功能,可以用来调试核心系统。

GPIO

有21个I/O管脚可配置为通用I/O。

EINT

OpenCPU支持外部中断输入。有三个I/O引脚可配置为外部

中断输入。但是,EINT不能用于高频率中断检测,这

会导致模块工作不稳定

PWM

有一个I/O引脚可配置为脉宽调制。有32K和13M时钟源

可用。

ADC

有一个可为ADC配置的模拟输入引脚。

Power Key

在OpenCPU中,应用程序可以捕捉到电源键被按下或释放的行为。然后开发人员可以重新定义按下power键的行为。

开发环境

程序框架

proc_main_task函数是嵌入式应用程序的入口,就像C应用程序中的main()一样。

Ql-OS-GetMessage是嵌入式应用从任务的消息队列接收消息的重要系统功能。

MSG_ID_RIL_READY是RIL模块发送给主任务的系统消息。

MSG_ID_URC_INDICATION是一条系统消息,指示新的URC即将到来。

数据类型

TypeDescription
bool布尔变量(应为TRUE或FALSE)。
s88位有符号整数。
u88位无符号整数。
s1616位有符号整数。
u1616位无符号整数。
s3232位有符号整数。
u3232位无符号整数。
u6464位无符号整数。
float浮点变量。

系统配置

\SDK\custom\config目录下,开发者可以根据自己对堆内存的要求重新配置应用程序大小、任务添加和任务堆栈大小配置,以GPIO初始化状态。开发人员的所有配置文件都以前缀“custom_u”命名。

Config FileDescription
custom_feature_def.h启用OpenCPU功能。现在只包括RIL。一般不需要更改。
custom_gpio_cfg.hgpio初始化状态的配置
custom_heap_cfg.h堆内存大小配置
custom_task_cfg.h多任务配置
custom_sys_cfg.h其他系统配置,包括电源键、指定外部看门狗gpio管脚,并设置调试端口的工作模式

任务配置

OpenCPU支持多任务处理。开发人员只需要简单地按照下面的步骤在custom_task_cfg.h文件中添加一个记录就可以定义一个新任务。OpenCPU支持一个主任务和最多十个子任务。

如果任务中有文件操作,则栈大小必须设置为至少5KB。

开发人员应避免调用以下函数:Ql_Sleep()Ql_OS_takesimaphore()Ql_OS_TakeMutex()。这些函数将阻塞任务,从而使任务无法从消息队列中获取消息。如果消息队列已满,系统将意外地自动重新启动。

GPIO配置

OpenCPU中GPIO的配置,有两种方法可以初始化GPIO。一种是在custom_GPIO_cfg.h中配置GPIO列表初始化;另一种是在应用程序启动后调用与GPIO相关的api来初始化。但前者在时间序列上要早于后者。

定制配置

所有定制项都在custom_sys_cfg.c的TLV(type-Length-Value)中配置。开发者可以通过改变值来改变程序功能。

const ST_SystemConfig SystemCfg[] = {
    {SYS_CONFIG_APP_ENABLE_ID,      SYS_CONFIG_APPENABLE_DATA_SIZE,(void*)&appEnableCfg},
    {SYS_CONFIG_PWRKEY_DATA_ID,     SYS_CONFIG_PWRKEY_DATA_SIZE,   (void*)&pwrkeyCfg   },
    {SYS_CONFIG_WATCHDOG_DATA_ID,   SYS_CONFIG_WATCHDOG_DATA_SIZE, (void*)&wtdCfg      },
    {SYS_CONFIG_DEBUG_MODE_ID,      SYS_CONFIG_DEBUGMODE_DATA_SIZE,(void*)&debugPortCfg},
    {SYS_CONFIG_END, 0, NULL                                                           }
};
ItemTypeLengthDefault ValuePossible Value
App EnablingSYS_CONFIG_APP_ENABLE_ID4APP_ENABLEAPP_ENABLE APP_DISABLE
PWRKEY CfgSYS_CONFIG_PWRKEY_DATA_ID2TRUE TRUETRUE/FALSE
GPIO WTD CfgSYS_CONFIG_WATCHDOG_DATA_ID8PINNAME_GPIO0One value of Enum_PinName
Working Mode for Debug PortSYS_CONFIG_DEBUG_MODE_ID4BASIC_MODEBASIC_MODE ADVANCE_MODE
PowerKey配置
static const ST_PowerKeyCfg pwrkeyCfg = {
    TRUE,  // PWRKEY pin通电模块的工作模式。
    /* 
    在向PWRKEY引脚输入低电平时自动通电。设置为FALSE时,将触发Ql_PwrKey_Register注册的回调。应用程序必须	调用Ql_LockPower()来锁定电源,否则当PWRKEY引脚处于高电平时,模块将掉电。
    */

    TRUE,  // 通过PWRKEY引脚关闭模块的工作模式。
    /* 
    在向PWRKEY引脚输入低电平时自动断电。设置为FALSE时,将触发Ql_PwrKey_Register注册的回调。应用程序会在	在关闭模块之前进行处理。 
    */
};
外部看门狗引脚

当采用外部看门狗监控应用程序时,模块必须在模块通电的整个期间为看门狗供电,包括启动、应用程序激活和升级的过程。

PeriodFeeding Host
BootingCore system
App RunningApp
Upgrading App by FOTACore system

因此,开发人员需指定哪个GPIO是为外部看门狗使用的。

static const ST_ExtWatchdogCfg wtdCfg = {
    PINNAME_PCM_OUT,  // Specify a pin which connects to the external watchdog
    PINNAME_END   // Specify another pin for watchdog if needed
};
调试端口工作模式

串行调试端口(UART2)可以作为公共串行端口(基本模式)或特殊调试端口(高级模式)工作,可以在应用程序期间调试某些问题。

static const ST_DebugPortCfg debugPortCfg = {
    BASIC_MODE      // Set the serial debug port (UART2) to a common serial port
    //ADVANCE_MODE   // Set the serial debug port (UART2) to a special debug port
};

API函数

时间API

OpenCPU提供与时间相关的API,包括设置本地时间、获取本地时间、将日历时间转换为秒或将秒转换为日历时间等。

时间结构定义如下:

typedef struct {
	s32 year; //Range: 2000~2127
	s32 month;
	s32 day;
    s32 hour; //In 24-hour time system
	s32 minute;
	s32 second;
	s32 timezone; //Range: -12~12
}ST_Time;
s32 Ql_SetLocalTime(ST_Time *datetime);
ST_Time *Ql_GetLocalTime(ST_Time * dateTime);
u64 Ql_Mktime(ST_Time *dateTime);

根据ST_Time结构体描述的时间返回UTC时间。

ST_Time *Ql_MKTime2CalendarTime(u64 seconds, ST_Time *pOutDateTime)

将UTC时间转换为本地时间;

定时器API

OpenCPU提供两种定时器。一个是”Common Timer“,一个是”Fast Timer“。OpenCPU系统允许在一个任务内同时运行最多10个Common Timer。Fast Timer仅提供一个。

电源管理API

电源管理包含与电源相关的操作,例如断电、电源键控制和低功耗启用/禁用。

  • 电源开关

    当PWRKEY引脚没有对地短路时,开发人员可以调用Ql_PowerDown函数关闭模块电源。当PWRKEY引脚对地短路时,此动作将重置模块。

  • 睡眠模式

    Ql_ SleepEnable可以启用模块睡眠模式。当模块空闲时进入睡眠模式,定时器超时、来电、短信、GPRS数据和中断事件可将模块从睡眠模式唤醒。

    Ql_sleepDisable函数可以在模块唤醒时禁用睡眠模式。

  • 断电

void Ql_PowerDown(u8 pwrDwnType);

​ pwrDwnType:1表示正常断电

  • 锁定电源
void Ql_LockPower(void);
  • Power Key回调函数注册
s32 Ql_PwrKey_Register(Callback_PowerKey_Ind callback_pwrKey);

typedef void (*Callback_PowerKey_Ind)(s32 param1, s32 param2);
  • 睡眠模式
s32 Ql_SleepEnable(void);
s32 Ql_SleepDisable(void);

GNSS API

打开或关闭GNSS。

s32 RIL_GPS_Open(u8 op);

参数

op:[In]接通/断开GNSS的操作。0表示关闭GNSS,1表示打开GNSS。

s32 RIL_GPS_Read(u8 *item, u8 *rdBuff);
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值