Merge branch ‘dev’of https://gitlink.org.cn/Ybeichen/xiuos.git into 'prepare_for_master' #2
|
|
@ -22,3 +22,6 @@
|
|||
[submodule "Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-riscv64/kendryte-sdk/kendryte-sdk-source"]
|
||||
path = Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-riscv64/kendryte-sdk/kendryte-sdk-source
|
||||
url = https://code.gitlink.org.cn/chunyexixiaoyu/kendryte-sdk-source.git
|
||||
[submodule "Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/k210_edu/kendryte-sdk/kendryte-sdk-source"]
|
||||
path = Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/k210_edu/kendryte-sdk/kendryte-sdk-source
|
||||
url = https://code.gitlink.org.cn/chunyexixiaoyu/kendryte-sdk-source.git
|
||||
|
|
|
|||
|
|
@ -0,0 +1,11 @@
|
|||
import os
|
||||
from building import *
|
||||
Import('RTT_ROOT')
|
||||
Import('rtconfig')
|
||||
cwd = GetCurrentDir()
|
||||
DEPENDS = ["LIB_LV"]
|
||||
SOURCES = []
|
||||
SOURCES = ['lv_init.c'] + ['lv_demo.c']+['lv_demo_calendar.c']
|
||||
path = [cwd]
|
||||
objs = DefineGroup('sensor_app', src = SOURCES, depend = DEPENDS,CPPPATH = path)
|
||||
Return("objs")
|
||||
|
|
@ -39,7 +39,7 @@ static void event_handler(lv_event_t * e)
|
|||
void lv_demo_calendar(void)
|
||||
{
|
||||
lv_obj_t * calendar = lv_calendar_create(lv_scr_act());
|
||||
lv_obj_set_size(calendar, 320, 320);//lv_obj_set_size(calendar, 800, 480);
|
||||
lv_obj_set_size(calendar, MY_DISP_HOR_RES, MY_DISP_VER_RES);//lv_obj_set_size(calendar, 800, 480);
|
||||
lv_obj_align(calendar, LV_ALIGN_CENTER, 0, 0);
|
||||
lv_obj_add_event_cb(calendar, event_handler, LV_EVENT_ALL, NULL);
|
||||
|
||||
|
|
|
|||
|
|
@ -7,8 +7,14 @@ DEPENDS = ["SUPPORT_SENSOR_FRAMEWORK"]
|
|||
SOURCES = []
|
||||
if GetDepend(['APPLICATION_SENSOR_CO2_ZG09']):
|
||||
SOURCES = ['co2_zg09.c'] + SOURCES
|
||||
if GetDepend(['APPLICATION_SENSOR_CO2_G8S']):
|
||||
SOURCES = ['co2_g8s.c'] + SOURCES
|
||||
if GetDepend(['APPLICATION_SENSOR_PM1_0_PS5308']):
|
||||
SOURCES = ['pm1_0_ps5308.c.c'] + SOURCES
|
||||
SOURCES = ['pm1_0_ps5308.c'] + SOURCES
|
||||
if GetDepend(['APPLICATION_SENSOR_PM2_5_PS5308']):
|
||||
SOURCES = ['pm2_5_ps5308.c'] + SOURCES
|
||||
if GetDepend(['APPLICATION_SENSOR_PM10_PS5308']):
|
||||
SOURCES = ['pm10_0_ps5308.c'] + SOURCES
|
||||
if GetDepend(['APPLICATION_SENSOR_VOICE_D124']):
|
||||
SOURCES = ['voice_d124.c'] + SOURCES
|
||||
if GetDepend(['APPLICATION_SENSOR_HUMIDITY_HS300X']):
|
||||
|
|
@ -19,6 +25,16 @@ if GetDepend(['APPLICATION_SENSOR_CH4_AS830']):
|
|||
SOURCES = ['ch4_as830.c'] + SOURCES
|
||||
if GetDepend(['APPLICATION_SENSOR_HCHO']):
|
||||
SOURCES = ['hcho_tb600b_wq_hcho1os.c'] + SOURCES
|
||||
if GetDepend(['APPLICATION_SENSOR_ALTITUDE_BMP180']):
|
||||
SOURCES = ['altitude_bmp180.c'] + SOURCES
|
||||
if GetDepend(['APPLICATION_SENSOR_TVOC_TB600B_TVOC10']):
|
||||
SOURCES = ['tvoc_tb600b_tvoc10.c'] + SOURCES
|
||||
if GetDepend(['APPLICATION_SENSOR_IAQ_TB600B_IAQ10']):
|
||||
SOURCES = ['iaq_tb600b_iaq10.c'] + SOURCES
|
||||
if GetDepend(['APPLICATION_SENSOR_WINDDIRECTION_QS_FX']):
|
||||
SOURCES = ['winddirection_qs_fx.c'] + SOURCES
|
||||
if GetDepend(['APPLICATION_SENSOR_WINDSPEED_QS_FS']):
|
||||
SOURCES = ['windspeed_qs_fs.c'] + SOURCES
|
||||
path = [cwd]
|
||||
objs = DefineGroup('sensor_app', src = SOURCES, depend = DEPENDS,CPPPATH = path)
|
||||
Return("objs")
|
||||
|
|
@ -28,6 +28,9 @@ void Co2Zg09(void)
|
|||
{
|
||||
struct SensorQuantity *co2 = SensorQuantityFind(SENSOR_QUANTITY_ZG09_CO2, SENSOR_QUANTITY_CO2);
|
||||
SensorQuantityOpen(co2);
|
||||
printf("CO2 : %d ppm\n", SensorQuantityReadValue(co2));
|
||||
for (int i = 0; i < 5; i ++) {
|
||||
PrivTaskDelay(2000);
|
||||
printf("CO2 : %d ppm\n", SensorQuantityReadValue(co2));
|
||||
}
|
||||
SensorQuantityClose(co2);
|
||||
}
|
||||
|
|
@ -29,9 +29,10 @@ void HchoTb600bHcho1os(void)
|
|||
struct SensorQuantity *hcho = SensorQuantityFind(SENSOR_QUANTITY_TB600B_HCHO, SENSOR_QUANTITY_HCHO);
|
||||
SensorQuantityOpen(hcho);
|
||||
int32_t result = 0;
|
||||
|
||||
result = SensorQuantityReadValue(hcho);
|
||||
|
||||
printf("tvoc concentration is : %dppb\n", result);
|
||||
for (int i = 0; i < 5; i ++) {
|
||||
PrivTaskDelay(1000);
|
||||
result = SensorQuantityReadValue(hcho);
|
||||
printf("tvoc concentration is : %dppb\n", result);
|
||||
}
|
||||
SensorQuantityClose(hcho);
|
||||
}
|
||||
|
|
@ -30,7 +30,7 @@ void HumiHs300x(void)
|
|||
int32_t humidity;
|
||||
struct SensorQuantity *humi = SensorQuantityFind(SENSOR_QUANTITY_HS300X_HUMIDITY, SENSOR_QUANTITY_HUMI);
|
||||
SensorQuantityOpen(humi);
|
||||
for (i = 0; i < 10; i ++) {
|
||||
for (i = 0; i < 5; i ++) {
|
||||
humidity = SensorQuantityReadValue(humi);
|
||||
printf("Humidity : %d.%d %%RH\n", humidity/10, humidity%10);
|
||||
PrivTaskDelay(500);
|
||||
|
|
|
|||
|
|
@ -29,9 +29,10 @@ void IaqTb600bIaq10(void)
|
|||
struct SensorQuantity *iaq = SensorQuantityFind(SENSOR_QUANTITY_TB600B_IAQ, SENSOR_QUANTITY_IAQ);
|
||||
SensorQuantityOpen(iaq);
|
||||
int32_t result = 0;
|
||||
|
||||
result = SensorQuantityReadValue(iaq);
|
||||
|
||||
printf("Gas concentration is : %dppb\n", result);
|
||||
for (int i = 0; i < 5; i ++) {
|
||||
PrivTaskDelay(1000);
|
||||
result = SensorQuantityReadValue(iaq);
|
||||
printf("Gas concentration is : %dppb\n", result);
|
||||
}
|
||||
SensorQuantityClose(iaq);
|
||||
}
|
||||
|
|
@ -29,6 +29,9 @@ void Pm100Ps5308(void)
|
|||
struct SensorQuantity *pm10_0 = SensorQuantityFind(SENSOR_QUANTITY_PS5308_PM10, SENSOR_QUANTITY_PM);
|
||||
SensorQuantityOpen(pm10_0);
|
||||
PrivTaskDelay(2000);
|
||||
printf("PM10 : %d ug/m³\n", SensorQuantityReadValue(pm10_0));
|
||||
for (int i = 0; i < 10; i ++) {
|
||||
PrivTaskDelay(1000);
|
||||
printf("PM10 : %d ug/m³\n", SensorQuantityReadValue(pm10_0));
|
||||
}
|
||||
SensorQuantityClose(pm10_0);
|
||||
}
|
||||
|
|
@ -29,6 +29,9 @@ void Pm10Ps5308(void)
|
|||
struct SensorQuantity *pm1_0 = SensorQuantityFind(SENSOR_QUANTITY_PS5308_PM1_0, SENSOR_QUANTITY_PM);
|
||||
SensorQuantityOpen(pm1_0);
|
||||
PrivTaskDelay(2000);
|
||||
printf("PM1.0 : %d ug/m³\n", SensorQuantityReadValue(pm1_0));
|
||||
for (int i = 0; i < 10; i ++) {
|
||||
PrivTaskDelay(1000);
|
||||
printf("PM1.0 : %d ug/m³\n", SensorQuantityReadValue(pm1_0));
|
||||
}
|
||||
SensorQuantityClose(pm1_0);
|
||||
}
|
||||
|
|
@ -29,6 +29,9 @@ void Pm25Ps5308(void)
|
|||
struct SensorQuantity *pm2_5 = SensorQuantityFind(SENSOR_QUANTITY_PS5308_PM2_5, SENSOR_QUANTITY_PM);
|
||||
SensorQuantityOpen(pm2_5);
|
||||
PrivTaskDelay(2000);
|
||||
printf("PM2.5 : %d ug/m³\n", SensorQuantityReadValue(pm2_5));
|
||||
for (int i = 0; i < 10; i ++) {
|
||||
PrivTaskDelay(1000);
|
||||
printf("PM2.5 : %d ug/m³\n", SensorQuantityReadValue(pm2_5));
|
||||
}
|
||||
SensorQuantityClose(pm2_5);
|
||||
}
|
||||
|
|
@ -30,12 +30,12 @@ void TempHs300x(void)
|
|||
int32_t temperature;
|
||||
struct SensorQuantity *temp = SensorQuantityFind(SENSOR_QUANTITY_HS300X_TEMPERATURE, SENSOR_QUANTITY_TEMP);
|
||||
SensorQuantityOpen(temp);
|
||||
for (i = 0; i < 10; i ++) {
|
||||
for (i = 0; i < 5; i ++) {
|
||||
temperature = SensorQuantityReadValue(temp);
|
||||
if (temperature > 0)
|
||||
printf("Temperature : %d.%d ℃\n", temperature/10, temperature%10);
|
||||
printf("Temperature : %d.%d ℃ \n", temperature/10, temperature%10);
|
||||
else
|
||||
printf("Temperature : %d.%d ℃\n", temperature/10, -temperature%10);
|
||||
printf("Temperature : %d.%d ℃ \n", temperature/10, -temperature%10);
|
||||
|
||||
PrivTaskDelay(500);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,9 +29,11 @@ void TvocTb600bTvoc10(void)
|
|||
struct SensorQuantity *tvoc = SensorQuantityFind(SENSOR_QUANTITY_TB600B_TVOC, SENSOR_QUANTITY_TVOC);
|
||||
SensorQuantityOpen(tvoc);
|
||||
int32_t result = 0;
|
||||
|
||||
result = SensorQuantityReadValue(tvoc);
|
||||
|
||||
printf("tvoc concentration is : %dppb\n", result);
|
||||
PrivTaskDelay(1000);
|
||||
for (int i = 0; i < 3; i ++) {
|
||||
PrivTaskDelay(1000);
|
||||
result = SensorQuantityReadValue(tvoc);
|
||||
printf("tvoc concentration is : %dppb\n", result);
|
||||
}
|
||||
SensorQuantityClose(tvoc);
|
||||
}
|
||||
|
|
@ -29,7 +29,10 @@ void VoiceD124(void)
|
|||
struct SensorQuantity *voice = SensorQuantityFind(SENSOR_QUANTITY_D124_VOICE, SENSOR_QUANTITY_VOICE);
|
||||
SensorQuantityOpen(voice);
|
||||
PrivTaskDelay(2000);
|
||||
uint16_t result = SensorQuantityReadValue(voice);
|
||||
printf("voice : %d.%d dB\n", result/(10*voice->value.decimal_places), result%(10*voice->value.decimal_places));
|
||||
for (int i = 0; i < 10; i ++) {
|
||||
uint16_t result = SensorQuantityReadValue(voice);
|
||||
printf("voice : %d.%d dB\n", result/(10*voice->value.decimal_places), result%(10*voice->value.decimal_places));
|
||||
PrivTaskDelay(1000);
|
||||
}
|
||||
SensorQuantityClose(voice);
|
||||
}
|
||||
|
|
@ -29,14 +29,10 @@ void WindDirectionQsFx(void)
|
|||
struct SensorQuantity *wind_direction = SensorQuantityFind(SENSOR_QUANTITY_QS_FX_WINDDIRECTION, SENSOR_QUANTITY_WINDDIRECTION);
|
||||
SensorQuantityOpen(wind_direction);
|
||||
PrivTaskDelay(2000);
|
||||
int result = 0;
|
||||
for(int i=0;i<2000;i++)
|
||||
{
|
||||
result = 0;
|
||||
PrivTaskDelay(1000);
|
||||
result = SensorQuantityReadValue(wind_direction);
|
||||
if(result > 0)
|
||||
printf("wind direction : %d degree\n", result);
|
||||
for (int i = 0; i < 10; i ++) {
|
||||
uint16_t result = SensorQuantityReadValue(wind_direction);
|
||||
printf("wind direction : %d degree\n", result);
|
||||
PrivTaskDelay(2000);
|
||||
}
|
||||
SensorQuantityClose(wind_direction);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,14 +29,10 @@ void WindSpeedQsFs(void)
|
|||
struct SensorQuantity *wind_speed = SensorQuantityFind(SENSOR_QUANTITY_QS_FS_WINDSPEED, SENSOR_QUANTITY_WINDSPEED);
|
||||
SensorQuantityOpen(wind_speed);
|
||||
PrivTaskDelay(2000);
|
||||
int result = 0;
|
||||
for(int i=0;i<2000;i++)
|
||||
{
|
||||
result = 0;
|
||||
PrivTaskDelay(1000);
|
||||
result = SensorQuantityReadValue(wind_speed);
|
||||
if(result > 0)
|
||||
printf("wind speed : %d.%d m/s\n", result/10, result%10);
|
||||
for (int i = 0; i < 10; i ++) {
|
||||
uint16_t result = SensorQuantityReadValue(wind_speed);
|
||||
printf("wind speed : %d.%d m/s\n", result/10, result%10);
|
||||
PrivTaskDelay(2000);
|
||||
}
|
||||
SensorQuantityClose(wind_speed);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,17 +69,17 @@ if ADD_RTTHREAD_FETURES
|
|||
|
||||
config ADAPTER_HC08_DRIVER_EXTUART
|
||||
bool "Using extra uart to support bluetooth"
|
||||
default n
|
||||
default y
|
||||
|
||||
config ADAPTER_HC08_DRIVER
|
||||
string "HC08 device uart driver path"
|
||||
default "/dev/dev2"
|
||||
default "/dev/extuart_dev2"
|
||||
depends on !ADAPTER_HC08_DRIVER_EXTUART
|
||||
|
||||
if ADAPTER_HC08_DRIVER_EXTUART
|
||||
config ADAPTER_HC08_DRIVER
|
||||
string "HC08 device extra uart driver path"
|
||||
default "/dev/dev2"
|
||||
default "/dev/extuart_dev2"
|
||||
|
||||
config ADAPTER_HC08_DRIVER_EXT_PORT
|
||||
int "if HC08 device using extuart, choose port"
|
||||
|
|
|
|||
|
|
@ -424,3 +424,130 @@ int AdapterWifiTestWithParam(int argc, char *argv[])
|
|||
|
||||
#endif
|
||||
|
||||
#ifdef ADD_RTTHREAD_FETURES
|
||||
|
||||
enum
|
||||
{
|
||||
APT_WIFI_PARAM_IP,
|
||||
APT_WIFI_PARAM_PORT,
|
||||
APT_WIFI_PARAM_SSID,
|
||||
APT_WIFI_PARAM_PWD,
|
||||
APT_WIFI_PARAM_GW,
|
||||
APT_WIFI_PARAM_SERVER,
|
||||
APT_WIFI_PARAM_MASK,
|
||||
APT_WIFI_PARAM_PING,
|
||||
APT_WIFI_PARAM_NUM
|
||||
};
|
||||
|
||||
#define APT_WIFI_PARAM_LEN 128
|
||||
|
||||
char wifi_param[APT_WIFI_PARAM_NUM][APT_WIFI_PARAM_LEN] = {0};
|
||||
|
||||
#define CHECK_RET(__func) \
|
||||
ret = __func; \
|
||||
if(ret != 0){ \
|
||||
printf("%s %d failed\n", __func__, __LINE__); \
|
||||
AdapterDeviceClose(adapter); \
|
||||
free(adapter->adapter_param); \
|
||||
return ret; \
|
||||
};
|
||||
|
||||
void AdapterWifiGetParam(int argc, char *argv[])
|
||||
{
|
||||
int i, j;
|
||||
char *param_str[] = {"ip", "port", "ssid", "pwd", "gw", "server", "mask", "ping"};
|
||||
char *default_str[] =
|
||||
{
|
||||
"192.168.141.34",
|
||||
"12345",
|
||||
"test",
|
||||
"tttttttt",
|
||||
"192.168.141.119",
|
||||
"192.168.141.119",
|
||||
"255.255.255.0",
|
||||
"220.181.38.251"
|
||||
};
|
||||
|
||||
for(i = 0; i < APT_WIFI_PARAM_NUM; i ++)
|
||||
{
|
||||
memset(wifi_param[i], 0, APT_WIFI_PARAM_LEN);
|
||||
strcpy(wifi_param[i], default_str[i]);
|
||||
}
|
||||
|
||||
for(i = 0; i < argc; i ++)
|
||||
{
|
||||
for(j = 0; j < APT_WIFI_PARAM_NUM; j ++)
|
||||
{
|
||||
if(strncmp(argv[i], param_str[j], strlen(param_str[j])) == 0)
|
||||
{
|
||||
printf("wifi %d: %s\n", j, argv[i] + strlen(param_str[j]) + 1);
|
||||
strcpy(wifi_param[j], argv[i] + strlen(param_str[j]) + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
printf("--- wifi parameter ---\n");
|
||||
for(i = 0; i < APT_WIFI_PARAM_NUM; i ++)
|
||||
{
|
||||
printf("%7.7s = %s\n", param_str[i], wifi_param[i]);
|
||||
}
|
||||
printf("----------------------\n");
|
||||
}
|
||||
|
||||
|
||||
int AdapterWifiTestWithParam(int argc, char *argv[])
|
||||
{
|
||||
int i, ret;
|
||||
|
||||
struct Adapter* adapter = AdapterDeviceFindByName(ADAPTER_WIFI_NAME);
|
||||
AdapterWifiGetParam(argc, argv);
|
||||
|
||||
enum NetRoleType net_role = CLIENT;
|
||||
enum IpType ip_type = IPV4;
|
||||
|
||||
adapter->adapter_param = malloc(sizeof(struct WifiParam));
|
||||
memset(adapter->adapter_param, 0, sizeof(struct WifiParam));
|
||||
struct WifiParam *apt_param = (struct WifiParam *)adapter->adapter_param;
|
||||
strcpy(apt_param->wifi_ssid, wifi_param[APT_WIFI_PARAM_SSID]);
|
||||
strcpy(apt_param->wifi_pwd, wifi_param[APT_WIFI_PARAM_PWD]);
|
||||
|
||||
printf("apt %p ssid %p %s\n", apt_param, apt_param->wifi_ssid);
|
||||
|
||||
CHECK_RET(AdapterDeviceOpen(adapter));
|
||||
CHECK_RET(AdapterDeviceSetUp(adapter));
|
||||
|
||||
CHECK_RET(AdapterDeviceSetAddr(adapter, wifi_param[APT_WIFI_PARAM_IP], wifi_param[APT_WIFI_PARAM_GW],
|
||||
wifi_param[APT_WIFI_PARAM_MASK]));
|
||||
|
||||
CHECK_RET(AdapterDeviceNetstat(adapter));
|
||||
|
||||
adapter->socket.protocal = SOCKET_PROTOCOL_TCP;
|
||||
CHECK_RET(AdapterDeviceConnect(adapter, net_role, wifi_param[APT_WIFI_PARAM_SERVER],
|
||||
wifi_param[APT_WIFI_PARAM_PORT], ip_type));
|
||||
|
||||
const char *wifi_msg = "Wifi Test";
|
||||
for(i = 0; i < 10; i++)
|
||||
{
|
||||
AdapterDeviceSend(adapter, wifi_msg, strlen(wifi_msg));
|
||||
PrivTaskDelay(4000);
|
||||
}
|
||||
|
||||
char wifi_recv_msg[APT_WIFI_PARAM_LEN];
|
||||
memset(wifi_recv_msg, 0, APT_WIFI_PARAM_LEN);
|
||||
for(i = 0; i < APT_WIFI_PARAM_NUM; i ++)
|
||||
{
|
||||
AdapterDeviceRecv(adapter, wifi_recv_msg, 128);
|
||||
PrivTaskDelay(1000);
|
||||
}
|
||||
|
||||
// printf("ping %s\n", wifi_param[APT_WIFI_PARAM_PING]);
|
||||
//
|
||||
// CHECK_RET(AdapterDevicePing(adapter, wifi_param[APT_WIFI_PARAM_PING]));
|
||||
// AdapterDeviceDisconnect(adapter, NULL);
|
||||
ret = AdapterDeviceClose(adapter);
|
||||
free(adapter->adapter_param);
|
||||
return ret;
|
||||
}
|
||||
PRIV_SHELL_CMD_FUNCTION(AdapterWifiTestWithParam, a WiFi test sample, PRIV_SHELL_CMD_MAIN_ATTR);
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,11 @@ if ADD_NUTTX_FETURES
|
|||
default "/dev/ttyS1"
|
||||
endif
|
||||
|
||||
if ADD_RTTHREAD_FETURES
|
||||
config ADAPTER_ESP8285_DRIVER
|
||||
string "ESP8285 device uart driver path"
|
||||
default "/dev/uart1"
|
||||
endif
|
||||
if ADD_XIZI_FETURES
|
||||
config ADAPTER_ESP8285_DRIVER
|
||||
string "ESP8285 device uart driver path"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
from building import *
|
||||
import os
|
||||
|
||||
cwd = GetCurrentDir()
|
||||
src = []
|
||||
if GetDepend(['ADAPTER_ESP8285_WIFI']):
|
||||
src += ['esp8285_wifi.c']
|
||||
|
||||
group = DefineGroup('connection wifi esp8285', src, depend = [], CPPPATH = [cwd])
|
||||
|
||||
|
||||
Return('group')
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
import os
|
||||
Import('RTT_ROOT')
|
||||
from building import *
|
||||
SOURCES = []
|
||||
if GetDepend(['CONNECTION_ADAPTER_ZIGBEE']):
|
||||
SOURCES = ['adapter_zigbee.c'] + SOURCES
|
||||
objs = []
|
||||
cwd = GetCurrentDir()
|
||||
path = [cwd]
|
||||
group = DefineGroup('zigbee', SOURCES, depend = [], CPPPATH = [cwd])
|
||||
objs = objs + group
|
||||
list = os.listdir(cwd)
|
||||
|
||||
for d in list:
|
||||
path = os.path.join(cwd, d)
|
||||
if os.path.isfile(os.path.join(path, 'SConscript')):
|
||||
objs = objs + SConscript(os.path.join(path, 'SConscript'))
|
||||
|
||||
Return('objs')
|
||||
|
|
@ -124,10 +124,8 @@ int SendZigbee(int argc, char *argv[])
|
|||
{
|
||||
const char *send_msg = argv[1];
|
||||
int ret = 0;
|
||||
|
||||
struct Adapter* adapter = AdapterDeviceFindByName(ADAPTER_ZIGBEE_NAME);
|
||||
|
||||
printf("send argv1 %s\n",argv[1]);
|
||||
ret = AdapterDeviceSend(adapter, send_msg, strlen(send_msg));
|
||||
if(ret < 0) {
|
||||
printf(" adapter send failed\n");
|
||||
|
|
@ -141,13 +139,14 @@ PRIV_SHELL_CMD_FUNCTION(SendZigbee, a ZigBee send sample, PRIV_SHELL_CMD_MAIN_AT
|
|||
|
||||
int RecvZigbee(void)
|
||||
{
|
||||
char recv_msg[128];
|
||||
char recv_msg[128]={0};
|
||||
struct Adapter* adapter = AdapterDeviceFindByName(ADAPTER_ZIGBEE_NAME);
|
||||
memset(recv_msg,0,128);
|
||||
AdapterDeviceRecv(adapter, recv_msg, 128);
|
||||
PrivTaskDelay(2000);
|
||||
printf("zigbee recv msg %s\n", recv_msg);
|
||||
|
||||
while(1) {
|
||||
AdapterDeviceRecv(adapter, recv_msg, 128);
|
||||
printf("zigbee recv msg : %s\n", recv_msg);
|
||||
PrivTaskDelay(2000);
|
||||
memset(recv_msg,0,128);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
PRIV_SHELL_CMD_FUNCTION(RecvZigbee, a ZigBee receive sample, PRIV_SHELL_CMD_MAIN_ATTR);
|
||||
|
|
|
|||
|
|
@ -85,5 +85,30 @@ endif
|
|||
endif
|
||||
|
||||
if ADD_RTTHREAD_FETURES
|
||||
config ADAPTER_E18_MODEPIN
|
||||
int "E18 MODE pin number"
|
||||
default "46"
|
||||
|
||||
config ADAPTER_E18_PIN_DRIVER
|
||||
string "E18 device pin driver path"
|
||||
default "/dev/pin"
|
||||
|
||||
config ADAPTER_E18_DRIVER_EXTUART
|
||||
bool "Using extra uart to support zigbee"
|
||||
default y
|
||||
|
||||
config ADAPTER_E18_DRIVER
|
||||
string "E18 device uart driver path"
|
||||
default "/dev/extuart_dev1"
|
||||
depends on !ADAPTER_E18_DRIVER_EXTUART
|
||||
|
||||
if ADAPTER_E18_DRIVER_EXTUART
|
||||
config ADAPTER_E18_DRIVER
|
||||
string "E18 device extra uart driver path"
|
||||
default "/dev/extuart_dev1"
|
||||
|
||||
config ADAPTER_E18_DRIVER_EXT_PORT
|
||||
int "if E18 device using extuart, choose port"
|
||||
default "1"
|
||||
endif
|
||||
endif
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
from building import *
|
||||
import os
|
||||
|
||||
cwd = GetCurrentDir()
|
||||
src = []
|
||||
if GetDepend(['ADAPTER_E18']):
|
||||
src += ['e18.c']
|
||||
group = DefineGroup('connection zigbee e18', src, depend = [], CPPPATH = [cwd])
|
||||
|
||||
Return('group')
|
||||
|
|
@ -69,6 +69,8 @@ static int E18HardwareModeGet()
|
|||
#else
|
||||
return E18_AS_HEX_MODE;
|
||||
#endif
|
||||
#elif defined(ADD_RTTHREAD_FETURES)
|
||||
return E18_AS_HEX_MODE;
|
||||
#else
|
||||
int ret = 0;
|
||||
int pin_fd;
|
||||
|
|
@ -229,6 +231,8 @@ static int E18NetworkModeConfig(struct Adapter *adapter)
|
|||
out:
|
||||
#ifdef ADD_NUTTX_FETURES
|
||||
if(E18_AS_HEX_MODE == mode)
|
||||
#elif defined(ADD_RTTHREAD_FETURES)
|
||||
if(E18_AS_HEX_MODE == mode)
|
||||
#else
|
||||
if(E18_AS_AT_MODE == mode)
|
||||
#endif
|
||||
|
|
@ -304,6 +308,8 @@ static int E18NetRoleConfig(struct Adapter *adapter)
|
|||
out:
|
||||
#ifdef ADD_NUTTX_FETURES
|
||||
if(E18_AS_HEX_MODE == mode)
|
||||
#elif defined(ADD_RTTHREAD_FETURES)
|
||||
if(E18_AS_HEX_MODE == mode)
|
||||
#else
|
||||
if(E18_AS_AT_MODE == mode)
|
||||
#endif
|
||||
|
|
@ -451,6 +457,8 @@ static int E18Join(struct Adapter *adapter, unsigned char *priv_net_group)
|
|||
if(!ret){
|
||||
#ifdef ADD_NUTTX_FETURES
|
||||
if(E18_AS_HEX_MODE == mode)
|
||||
#elif defined(ADD_RTTHREAD_FETURES)
|
||||
if(E18_AS_HEX_MODE == mode)
|
||||
#else
|
||||
if(E18_AS_AT_MODE == mode)
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ extern int Tb600bTvoc10TvocInit(void);
|
|||
extern int Tb600bWqHcho1osInit(void);
|
||||
extern int QsFxWindDirectionInit(void);
|
||||
extern int QsFsWindSpeedInit(void);
|
||||
extern int Bmp180AltitudeInit(void);
|
||||
|
||||
extern int lv_port_init(void);
|
||||
|
||||
|
|
@ -140,6 +141,9 @@ static struct InitDesc sensor_desc[] =
|
|||
{ "tvoc_tb600b_wq_hcho1os", Tb600bWqHcho1osInit },
|
||||
#endif
|
||||
|
||||
#ifdef SENSOR_DEVICE_BMP180
|
||||
{ "bmp180_altitude_1", Bmp180AltitudeInit },
|
||||
#endif
|
||||
{ "NULL", NULL },
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -27,6 +27,12 @@ config SENSOR_BMP180
|
|||
endif
|
||||
|
||||
if ADD_RTTHREAD_FETURES
|
||||
|
||||
config SENSOR_DEVICE_BMP180_DEV
|
||||
string "BMP180 device name"
|
||||
default "/dev/i2c1_dev0"
|
||||
|
||||
config SENSOR_DEVICE_BMP180_I2C_ADDR
|
||||
hex "BMP180 device i2c address"
|
||||
default 0x77
|
||||
endif
|
||||
endif
|
||||
|
|
|
|||
|
|
@ -24,10 +24,10 @@
|
|||
static struct SensorDevice bmp180;
|
||||
|
||||
typedef struct {
|
||||
int8_t ac_data[3];
|
||||
uint8_t unsigned_ac_data[3];
|
||||
int8_t b_data[2];
|
||||
int8_t m_data[3];
|
||||
int16 ac_data[3];
|
||||
uint16 unsigned_ac_data[3];
|
||||
int16 b_data[2];
|
||||
int16 m_data[3];
|
||||
}Bmp180RegData;
|
||||
|
||||
static Bmp180RegData bmp180_reg_data;
|
||||
|
|
@ -35,6 +35,10 @@ static Bmp180RegData bmp180_reg_data;
|
|||
const static unsigned char OSS = 0; // Oversampling Setting
|
||||
static long CalTemp_data = 0;
|
||||
|
||||
// I2c configuration
|
||||
uint16_t i2c_dev_addr = SENSOR_DEVICE_BMP180_I2C_ADDR;
|
||||
struct PrivIoctlCfg ioctl_cfg;
|
||||
|
||||
static struct SensorProductInfo info =
|
||||
{
|
||||
(SENSOR_ABILITY_ALTITUDE),
|
||||
|
|
@ -50,7 +54,6 @@ static struct SensorProductInfo info =
|
|||
static int SensorDeviceOpen(struct SensorDevice *sdev)
|
||||
{
|
||||
int result;
|
||||
uint16_t i2c_dev_addr = SENSOR_DEVICE_BMP180_I2C_ADDR;
|
||||
|
||||
sdev->fd = PrivOpen(SENSOR_DEVICE_BMP180_DEV, O_RDWR);
|
||||
if (sdev->fd < 0) {
|
||||
|
|
@ -58,7 +61,6 @@ static int SensorDeviceOpen(struct SensorDevice *sdev)
|
|||
return -1;
|
||||
}
|
||||
|
||||
struct PrivIoctlCfg ioctl_cfg;
|
||||
ioctl_cfg.ioctl_driver_type = I2C_TYPE;
|
||||
ioctl_cfg.args = &i2c_dev_addr;
|
||||
result = PrivIoctl(sdev->fd, OPE_INT, &ioctl_cfg);
|
||||
|
|
@ -74,6 +76,11 @@ static int SensorDeviceOpen(struct SensorDevice *sdev)
|
|||
*/
|
||||
static int SensorDeviceWrite(struct SensorDevice *sdev, const void *buf, size_t len)
|
||||
{
|
||||
#ifdef ADD_RTTHREAD_FETURES
|
||||
ioctl_cfg.ioctl_driver_type = I2C_TYPE;
|
||||
ioctl_cfg.args = &i2c_dev_addr;
|
||||
PrivIoctl(sdev->fd, OPE_INT, &ioctl_cfg);
|
||||
#endif
|
||||
if (PrivWrite(sdev->fd, buf, len) < 0)
|
||||
return -1;
|
||||
|
||||
|
|
@ -88,6 +95,11 @@ static int SensorDeviceWrite(struct SensorDevice *sdev, const void *buf, size_t
|
|||
*/
|
||||
static int SensorDeviceRead(struct SensorDevice *sdev, size_t len)
|
||||
{
|
||||
#ifdef ADD_RTTHREAD_FETURES
|
||||
ioctl_cfg.ioctl_driver_type = I2C_TYPE;
|
||||
ioctl_cfg.args = &i2c_dev_addr;
|
||||
PrivIoctl(sdev->fd, OPE_INT, &ioctl_cfg);
|
||||
#endif
|
||||
//Read i2c device data from i2c device address
|
||||
if (PrivRead(sdev->fd, sdev->buffer, len) < 0)
|
||||
return -1;
|
||||
|
|
@ -158,7 +170,7 @@ static uint16_t SensorDeviceBmp180ReadUT(struct SensorDevice *sdev)
|
|||
printf("SensorDeviceBmp180ReadUT write reg 0xF4 error. return 0x0\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
PrivTaskDelay(5);
|
||||
return SensorDeviceBmp180ReadRegs(sdev, 0xF6);
|
||||
}
|
||||
|
||||
|
|
@ -176,7 +188,7 @@ static uint16_t SensorDeviceBmp180ReadUP(struct SensorDevice *sdev)
|
|||
printf("SensorDeviceBmp180ReadUP write reg 0xF4 error. return 0x0\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
PrivTaskDelay(5);
|
||||
return SensorDeviceBmp180ReadRegs(sdev, 0xF6);
|
||||
}
|
||||
|
||||
|
|
@ -281,6 +293,9 @@ static int32_t ReadAltitude(struct SensorQuantity *quant)
|
|||
bmp180_temperature = SensorDeviceBmp180CalTemp(quant->sdev, ut, &bmp180_reg_data);
|
||||
bmp180_pressure = SensorDeviceBmp180CalPressure(quant->sdev, up, &bmp180_reg_data);
|
||||
bmp180_aititude = SensorDeviceBmp180CalAltitude(bmp180_pressure);
|
||||
printf("Bmp180 temperature is : %.2f ℃ \n",bmp180_temperature);
|
||||
printf("Bmp180 pressure = %.2f Pa\n",bmp180_pressure);
|
||||
printf("Bmp180 aititude = %.2f m\n",bmp180_aititude);
|
||||
|
||||
return (int32_t)bmp180_pressure;
|
||||
}
|
||||
|
|
@ -317,6 +332,3 @@ int Bmp180AltitudeInit(void)
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -108,6 +108,24 @@ config SENSOR_G8S
|
|||
endif
|
||||
|
||||
if ADD_RTTHREAD_FETURES
|
||||
config SENSOR_G8S_DRIVER_EXTUART
|
||||
bool "Using extra uart to support g8-s"
|
||||
default n
|
||||
|
||||
config SENSOR_DEVICE_G8S_DEV
|
||||
string "g8-s device uart path"
|
||||
default "/dev/uart2_dev2"
|
||||
depends on !SENSOR_G8S_DRIVER_EXTUART
|
||||
|
||||
if SENSOR_G8S_DRIVER_EXTUART
|
||||
config SENSOR_DEVICE_G8S_DEV
|
||||
string "g8-s device extra uart path"
|
||||
default "/dev/extuart_dev5"
|
||||
|
||||
config SENSOR_DEVICE_G8S_DEV_EXT_PORT
|
||||
int "if g8-s device using extuart, choose port"
|
||||
default "5"
|
||||
endif
|
||||
|
||||
endif
|
||||
endif
|
||||
|
|
|
|||
|
|
@ -142,7 +142,7 @@ static uint8_t getCheckSum(uint8_t *packet)
|
|||
{
|
||||
uint8_t i;
|
||||
uint8_t checksum = 0;
|
||||
for( i = 1; i < 12; i++)
|
||||
for( i = 1; i < 8; i++)
|
||||
{
|
||||
checksum += packet[i];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,6 +43,23 @@ config SENSOR_TB600B_IAQ10
|
|||
endif
|
||||
|
||||
if ADD_RTTHREAD_FETURES
|
||||
config SENSOR_TB600B_IAQ10_DRIVER_EXTUART
|
||||
bool "Using extra uart to support tb600b iaq10"
|
||||
default y
|
||||
|
||||
config SENSOR_DEVICE_TB600B_IAQ10_DEV
|
||||
string "tb600b iaq10 device uart path"
|
||||
default "/dev/uart2_dev2"
|
||||
depends on !SENSOR_TB600B_IAQ10_DRIVER_EXTUART
|
||||
|
||||
if SENSOR_TB600B_IAQ10_DRIVER_EXTUART
|
||||
config SENSOR_DEVICE_TB600B_IAQ10_DEV
|
||||
string "tb600b iaq10 device extra uart path"
|
||||
default "/dev/extuart_dev6"
|
||||
|
||||
config SENSOR_DEVICE_TB600B_IAQ10_DEV_EXT_PORT
|
||||
int "if TB600B_IAQ10 device using extuart, choose port"
|
||||
default "6"
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
|
|
|||
|
|
@ -0,0 +1,14 @@
|
|||
import os
|
||||
Import('RTT_ROOT')
|
||||
from building import *
|
||||
|
||||
cwd = GetCurrentDir()
|
||||
objs = []
|
||||
list = os.listdir(cwd)
|
||||
|
||||
for d in list:
|
||||
path = os.path.join(cwd, d)
|
||||
if os.path.isfile(os.path.join(path, 'SConscript')):
|
||||
objs = objs + SConscript(os.path.join(path, 'SConscript'))
|
||||
|
||||
Return('objs')
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
from building import *
|
||||
import os
|
||||
|
||||
cwd = GetCurrentDir()
|
||||
src = []
|
||||
if GetDepend(['SENSOR_TB600B_IAQ10']):
|
||||
src += ['tb600b_iaq10.c']
|
||||
group = DefineGroup('sensor IAQ10 TB600B', src, depend = [], CPPPATH = [cwd])
|
||||
|
||||
Return('group')
|
||||
|
|
@ -192,7 +192,7 @@ static int32_t QuantityRead(struct SensorQuantity *quant)
|
|||
result.TL = ((int)((quant->sdev->buffer[8] << 8)|quant->sdev->buffer[9]))%100;
|
||||
result.RhH = ((unsigned int)((quant->sdev->buffer[10] << 8)|quant->sdev->buffer[11]))/100;
|
||||
result.RhL = ((unsigned int)((quant->sdev->buffer[10] << 8)|quant->sdev->buffer[11]))%100;
|
||||
printf("Gas concentration is : %dppb\nThe temperature is : %d.%d℃\nThe humidity is : %d.%drh%%\n", result.gas, result.TH, result.TL, result.RhH, result.RhL);
|
||||
printf("Gas concentration is : %dppb\nThe temperature is : %d.%d℃ \nThe humidity is : %d.%drh%%\n", result.gas, result.TH, result.TL, result.RhH, result.RhL);
|
||||
return result.gas;
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -69,6 +69,23 @@ config SENSOR_PS5308
|
|||
endif
|
||||
|
||||
if ADD_RTTHREAD_FETURES
|
||||
config SENSOR_PS5308_DRIVER_EXTUART
|
||||
bool "Using extra uart to support PS5308"
|
||||
default y
|
||||
|
||||
config SENSOR_DEVICE_PS5308_DEV
|
||||
string "PS5308 device name"
|
||||
default "/dev/uart2_dev2"
|
||||
depends on !SENSOR_PS5308_DRIVER_EXTUART
|
||||
|
||||
if SENSOR_PS5308_DRIVER_EXTUART
|
||||
config SENSOR_DEVICE_PS5308_DEV
|
||||
string "PS5308 device extra uart path"
|
||||
default "/dev/extuart_dev6"
|
||||
|
||||
config SENSOR_DEVICE_PS5308_DEV_EXT_PORT
|
||||
int "if PS5308 device using extuart, choose port"
|
||||
default "6"
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
|
|
|||
|
|
@ -0,0 +1,14 @@
|
|||
import os
|
||||
Import('RTT_ROOT')
|
||||
from building import *
|
||||
|
||||
cwd = GetCurrentDir()
|
||||
objs = []
|
||||
list = os.listdir(cwd)
|
||||
|
||||
for d in list:
|
||||
path = os.path.join(cwd, d)
|
||||
if os.path.isfile(os.path.join(path, 'SConscript')):
|
||||
objs = objs + SConscript(os.path.join(path, 'SConscript'))
|
||||
|
||||
Return('objs')
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
from building import *
|
||||
import os
|
||||
|
||||
cwd = GetCurrentDir()
|
||||
src = []
|
||||
if GetDepend(['SENSOR_DEVICE_PS5308']):
|
||||
src += ['ps5308.c']
|
||||
group = DefineGroup('sensor PS5308 DEVICE', src, depend = [], CPPPATH = [cwd])
|
||||
|
||||
Return('group')
|
||||
|
|
@ -78,12 +78,18 @@ static int SensorDeviceOpen(struct SensorDevice *sdev)
|
|||
cfg.port_configure = PORT_CFG_INIT;
|
||||
#endif
|
||||
|
||||
result = PrivIoctl(sdev->fd, OPE_INT, &cfg);
|
||||
struct PrivIoctlCfg ioctl_cfg;
|
||||
ioctl_cfg.ioctl_driver_type = SERIAL_TYPE;
|
||||
ioctl_cfg.args = &cfg;
|
||||
result = PrivIoctl(sdev->fd, OPE_INT, &ioctl_cfg);
|
||||
|
||||
#ifdef ADD_RTTHREAD_FETURES
|
||||
return result;
|
||||
#else
|
||||
PrivTaskCreate(&active_task_id, NULL, &ReadTask, sdev);
|
||||
PrivTaskStartup(&active_task_id);
|
||||
|
||||
return result;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -93,8 +99,12 @@ static int SensorDeviceOpen(struct SensorDevice *sdev)
|
|||
*/
|
||||
static int SensorDeviceClose(struct SensorDevice *sdev)
|
||||
{
|
||||
#ifdef ADD_RTTHREAD_FETURES
|
||||
PrivMutexDelete(&buff_lock);
|
||||
#else
|
||||
PrivTaskDelete(active_task_id, 0);
|
||||
PrivMutexDelete(&buff_lock);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -172,6 +182,16 @@ static int32_t ReadPm1_0(struct SensorQuantity *quant)
|
|||
|
||||
uint32_t result;
|
||||
if (quant->sdev->done->read != NULL) {
|
||||
#ifdef ADD_RTTHREAD_FETURES
|
||||
uint32_t len = 0;
|
||||
PrivMutexObtain(&buff_lock);
|
||||
len = quant->sdev->done->read(quant->sdev, 32);
|
||||
if (len == 0) {
|
||||
printf("error read data length = 0.\n");
|
||||
return -1;
|
||||
}
|
||||
PrivMutexAbandon(&buff_lock);
|
||||
#endif
|
||||
uint16_t checksum = 0;
|
||||
PrivMutexObtain(&buff_lock);
|
||||
|
||||
|
|
@ -239,10 +259,20 @@ static int32_t ReadPm2_5(struct SensorQuantity *quant)
|
|||
|
||||
uint32_t result;
|
||||
if (quant->sdev->done->read != NULL) {
|
||||
#ifdef ADD_RTTHREAD_FETURES
|
||||
uint32_t len = 0;
|
||||
PrivMutexObtain(&buff_lock);
|
||||
len = quant->sdev->done->read(quant->sdev, 32);
|
||||
if (len == 0) {
|
||||
printf("error read data length = 0.\n");
|
||||
return -1;
|
||||
}
|
||||
PrivMutexAbandon(&buff_lock);
|
||||
#endif
|
||||
uint16_t checksum = 0;
|
||||
PrivMutexObtain(&buff_lock);
|
||||
|
||||
for (uint i = 0; i < 30; i++)
|
||||
for (uint8_t i = 0; i < 30; i++)
|
||||
checksum += quant->sdev->buffer[i];
|
||||
|
||||
if (checksum == (((uint16_t)quant->sdev->buffer[30] << 8) + ((uint16_t)quant->sdev->buffer[31]))) {
|
||||
|
|
@ -306,10 +336,20 @@ static int32_t ReadPm10(struct SensorQuantity *quant)
|
|||
|
||||
uint32_t result;
|
||||
if (quant->sdev->done->read != NULL) {
|
||||
#ifdef ADD_RTTHREAD_FETURES
|
||||
uint32_t len = 0;
|
||||
PrivMutexObtain(&buff_lock);
|
||||
len = quant->sdev->done->read(quant->sdev, 32);
|
||||
if (len == 0) {
|
||||
printf("error read data length = 0.\n");
|
||||
return -1;
|
||||
}
|
||||
PrivMutexAbandon(&buff_lock);
|
||||
#endif
|
||||
uint16_t checksum = 0;
|
||||
PrivMutexObtain(&buff_lock);
|
||||
|
||||
for (uint i = 0; i < 30; i++)
|
||||
for (uint8_t i = 0; i < 30; i++)
|
||||
checksum += quant->sdev->buffer[i];
|
||||
|
||||
if (checksum == (((uint16_t)quant->sdev->buffer[30] << 8) + ((uint16_t)quant->sdev->buffer[31]))) {
|
||||
|
|
|
|||
|
|
@ -43,6 +43,23 @@ config SENSOR_TB600B_TVOC10
|
|||
endif
|
||||
|
||||
if ADD_RTTHREAD_FETURES
|
||||
config SENSOR_TB600B_TVOC10_DRIVER_EXTUART
|
||||
bool "Using extra uart to support tb600b tvoc10"
|
||||
default y
|
||||
|
||||
config SENSOR_DEVICE_TB600B_TVOC10_DEV
|
||||
string "tb600b tvoc10 device uart path"
|
||||
default "/dev/uart2_dev2"
|
||||
depends on !SENSOR_TB600B_TVOC10_DRIVER_EXTUART
|
||||
|
||||
if SENSOR_TB600B_TVOC10_DRIVER_EXTUART
|
||||
config SENSOR_DEVICE_TB600B_TVOC10_DEV
|
||||
string "tb600b tvoc10 device extra uart path"
|
||||
default "/dev/extuart_dev6"
|
||||
|
||||
config SENSOR_DEVICE_TB600B_TVOC10_DEV_EXT_PORT
|
||||
int "if TB600B_TVOC10 device using extuart, choose port"
|
||||
default "6"
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
|
|
|||
|
|
@ -0,0 +1,14 @@
|
|||
import os
|
||||
Import('RTT_ROOT')
|
||||
from building import *
|
||||
|
||||
cwd = GetCurrentDir()
|
||||
objs = []
|
||||
list = os.listdir(cwd)
|
||||
|
||||
for d in list:
|
||||
path = os.path.join(cwd, d)
|
||||
if os.path.isfile(os.path.join(path, 'SConscript')):
|
||||
objs = objs + SConscript(os.path.join(path, 'SConscript'))
|
||||
|
||||
Return('objs')
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
from building import *
|
||||
import os
|
||||
|
||||
cwd = GetCurrentDir()
|
||||
src = []
|
||||
if GetDepend(['SENSOR_TB600B_TVOC10']):
|
||||
src += ['tb600b_tvoc10.c']
|
||||
group = DefineGroup('sensor TVOC10 TB600B', src, depend = [], CPPPATH = [cwd])
|
||||
|
||||
Return('group')
|
||||
|
|
@ -184,7 +184,7 @@ static int32_t QuantityRead(struct SensorQuantity *quant)
|
|||
RhH = ((unsigned int)((quant->sdev->buffer[10] << 8)|quant->sdev->buffer[11]))/100;
|
||||
RhL = ((unsigned int)((quant->sdev->buffer[10] << 8)|quant->sdev->buffer[11]))%100;
|
||||
|
||||
printf("tvoc concentration is : %dug/m³(%dppb)\nThe temperature is : %d.%d℃\nThe humidity is : %d.%drh%%\n", ugm3, ppb, TH, TL, RhH, RhL);
|
||||
printf("tvoc concentration is : %dug/m³(%dppb)\nThe temperature is : %d.%d℃ \nThe humidity is : %d.%drh%% \n", ugm3, ppb, TH, TL, RhH, RhL);
|
||||
return ppb;
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -51,6 +51,23 @@ config SENSOR_QS_FX
|
|||
endif
|
||||
|
||||
if ADD_RTTHREAD_FETURES
|
||||
config SENSOR_QS_FX_DRIVER_EXTUART
|
||||
bool "Using extra uart to support qs-fx"
|
||||
default y
|
||||
|
||||
config SENSOR_DEVICE_QS_FX_DEV
|
||||
string "qs-fx device name"
|
||||
default "/dev/uart2_dev2"
|
||||
depends on !SENSOR_QS_FX_DRIVER_EXTUART
|
||||
|
||||
if SENSOR_QS_FX_DRIVER_EXTUART
|
||||
config SENSOR_DEVICE_QS_FX_DEV
|
||||
string "qs-fx device extra uart path"
|
||||
default "/dev/extuart_dev2"
|
||||
|
||||
config SENSOR_DEVICE_QS_FX_DEV_EXT_PORT
|
||||
int "if qs-fx device using extuart, choose port"
|
||||
default "2"
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
|
|
|||
|
|
@ -166,7 +166,7 @@ static int32_t ReadWindDirection(struct SensorQuantity *quant)
|
|||
if (quant->sdev->done->read != NULL) {
|
||||
if (quant->sdev->status == SENSOR_DEVICE_PASSIVE) {
|
||||
quant->sdev->done->read(quant->sdev, 7);
|
||||
if(Crc16(quant->sdev->buffer,7)!=0x00){
|
||||
if(Crc16(quant->sdev->buffer,7)!=0x00) {
|
||||
return -1;
|
||||
}
|
||||
result = (quant->sdev->buffer[3] << 8) | quant->sdev->buffer[4];
|
||||
|
|
|
|||
|
|
@ -51,6 +51,23 @@ config SENSOR_QS_FS
|
|||
endif
|
||||
|
||||
if ADD_RTTHREAD_FETURES
|
||||
config SENSOR_QS_FS_DRIVER_EXTUART
|
||||
bool "Using extra uart to support qs-fx"
|
||||
default y
|
||||
|
||||
config SENSOR_DEVICE_QS_FS_DEV
|
||||
string "qs-fx device name"
|
||||
default "/dev/uart2_dev2"
|
||||
depends on !SENSOR_QS_FS_DRIVER_EXTUART
|
||||
|
||||
if SENSOR_QS_FS_DRIVER_EXTUART
|
||||
config SENSOR_DEVICE_QS_FS_DEV
|
||||
string "qs-fx device extra uart path"
|
||||
default "/dev/extuart_dev7"
|
||||
|
||||
config SENSOR_DEVICE_QS_FS_DEV_EXT_PORT
|
||||
int "if qs-fx device using extuart, choose port"
|
||||
default "7"
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
#include <sensor.h>
|
||||
|
||||
static struct SensorDevice qs_fs;
|
||||
static const unsigned char instructions[] = {0x02,0x03,0x00,0x00,0x00,0x01,0x84,0x39};
|
||||
static const unsigned char instructions[] = {0x02, 0x03, 0x00, 0x00, 0x00, 0x01, 0x84, 0x39};
|
||||
|
||||
static struct SensorProductInfo info =
|
||||
{
|
||||
|
|
|
|||
|
|
@ -187,6 +187,16 @@ static int PrivPinIoctl(int fd, int cmd, void *args)
|
|||
return ioctl(fd, cmd, pin_cfg);
|
||||
}
|
||||
|
||||
static int PrivI2cIoctl(int fd, int cmd, void *args)
|
||||
{
|
||||
struct dfs_fd *rt_fd;
|
||||
int ret = 0;
|
||||
rt_fd = fd_get(fd);
|
||||
rt_fd->pos = *(off_t *)args;
|
||||
// ret = rt_fd->fops->ioctl(rt_fd, RT_I2C_DEV_CTRL_ADDR, args);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int PrivIoctl(int fd, int cmd, void *args)
|
||||
{
|
||||
int ret;
|
||||
|
|
@ -200,6 +210,9 @@ int PrivIoctl(int fd, int cmd, void *args)
|
|||
case PIN_TYPE:
|
||||
ret = PrivPinIoctl(fd, cmd, ioctl_cfg->args);
|
||||
break;
|
||||
case I2C_TYPE:
|
||||
ret = PrivI2cIoctl(fd, cmd, ioctl_cfg->args);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
#ifndef _STDBOOL_H
|
||||
typedef signed char bool;
|
||||
//typedef signed char bool;
|
||||
#endif
|
||||
typedef signed char int8;
|
||||
typedef signed short int16;
|
||||
|
|
@ -73,6 +73,8 @@ typedef signed int int32;
|
|||
typedef unsigned char uint8;
|
||||
typedef unsigned short uint16;
|
||||
typedef unsigned int uint32;
|
||||
#define EOK 0
|
||||
#define x_err_t int
|
||||
|
||||
#ifdef ARCH_CPU_64BIT
|
||||
typedef signed long int64;
|
||||
|
|
@ -144,6 +146,7 @@ struct SerialDataCfg
|
|||
uint8_t serial_bit_order;
|
||||
uint8_t serial_invert_mode;
|
||||
uint16_t serial_buffer_size;
|
||||
int32 serial_timeout;
|
||||
|
||||
uint8_t is_ext_uart;
|
||||
uint8_t ext_uart_no;
|
||||
|
|
@ -165,6 +168,61 @@ struct PrivIoctlCfg
|
|||
void *args;
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint16 x_pos;
|
||||
uint16 y_pos;
|
||||
uint16 width;
|
||||
uint16 height;
|
||||
uint8 font_size;
|
||||
uint8 *addr;
|
||||
uint16 font_color;
|
||||
uint16 back_color;
|
||||
}LcdStringParam;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint16 x_startpos;
|
||||
uint16 x_endpos;
|
||||
uint16 y_startpos;
|
||||
uint16 y_endpos;
|
||||
void* pixel_color;
|
||||
}LcdPixelParam;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char type; // 0:write string;1:write dot
|
||||
LcdPixelParam pixel_info;
|
||||
LcdStringParam string_info;
|
||||
}LcdWriteParam;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint16_t x;
|
||||
uint16_t y;
|
||||
uint16_t press;
|
||||
}TouchDataParam;
|
||||
|
||||
struct TouchDataStandard
|
||||
{
|
||||
uint16_t x;
|
||||
uint16_t y;
|
||||
};
|
||||
#define PRIV_SYSTICK_GET (rt_tick_get())
|
||||
#define PRIV_LCD_DEV "/dev/lcd"
|
||||
#define MY_DISP_HOR_RES LCD_WIDTH
|
||||
#define MY_DISP_VER_RES LCD_HEIGHT
|
||||
|
||||
#define PRIV_TOUCH_DEV "/dev/touch"
|
||||
#define MY_INDEV_X LCD_WIDTH
|
||||
#define MY_INDEV_Y LCD_HEIGHT
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*********************shell***********************/
|
||||
//for int func(int argc, char *agrv[])
|
||||
#define PRIV_SHELL_CMD_MAIN_ATTR
|
||||
|
|
|
|||
|
|
@ -8,7 +8,9 @@ cwd = GetCurrentDir()
|
|||
|
||||
src = []
|
||||
inc = []
|
||||
|
||||
src += ['../porting/lv_port_disp_template.c']
|
||||
src += ['../porting/lv_port_fs_template.c']
|
||||
src += ['../porting/lv_port_indev_template.c']
|
||||
lvgl_cwd = cwd + '/../'
|
||||
lvgl_src_cwd = lvgl_cwd + 'src/'
|
||||
|
||||
|
|
@ -19,6 +21,7 @@ for root, dirs, files in os.walk(lvgl_src_cwd):
|
|||
src = src + Glob(os.path.join(root,dir,'*.c'))
|
||||
inc = inc + [os.path.join(root,dir)]
|
||||
|
||||
inc = inc + [lvgl_cwd]
|
||||
LOCAL_CCFLAGS = ''
|
||||
if rtconfig.PLATFORM == 'gcc': # GCC
|
||||
LOCAL_CCFLAGS += ' -std=c99'
|
||||
|
|
@ -27,39 +30,15 @@ elif rtconfig.PLATFORM == 'armcc': # Keil AC5
|
|||
elif rtconfig.PLATFORM == 'armclang': # Keil AC6
|
||||
LOCAL_CCFLAGS += ' -std=c99 -g -w'
|
||||
|
||||
group = DefineGroup('LVGL', src, depend = ['PKG_USING_LVGL'], CPPPATH = inc, LOCAL_CCFLAGS = LOCAL_CCFLAGS)
|
||||
group = DefineGroup('LVGL', src, depend = ['LIB_LV'], CPPPATH = inc, LOCAL_CCFLAGS = LOCAL_CCFLAGS)
|
||||
|
||||
port_src = Glob('*.c')
|
||||
port_inc = [cwd]
|
||||
group = group + DefineGroup('LVGL-port', port_src, depend = ['PKG_USING_LVGL'], CPPPATH = port_inc)
|
||||
port_inc = [cwd]+['../porting/']
|
||||
group = group + DefineGroup('LVGL-port', port_src, depend = ['LIB_LV'], CPPPATH = port_inc)
|
||||
|
||||
list = os.listdir(cwd)
|
||||
for d in list:
|
||||
path = os.path.join(cwd, d)
|
||||
if os.path.isfile(os.path.join(path, 'SConscript')):
|
||||
group = group + SConscript(os.path.join(d, 'SConscript'))
|
||||
|
||||
#
|
||||
# try:
|
||||
# shutil.rmtree(os.path.join(lvgl_cwd, '.github'))
|
||||
# shutil.rmtree(os.path.join(lvgl_cwd, 'docs'))
|
||||
# shutil.rmtree(os.path.join(lvgl_cwd, 'scripts'))
|
||||
# shutil.rmtree(os.path.join(lvgl_cwd, 'tests'))
|
||||
# shutil.rmtree(os.path.join(lvgl_cwd, 'zephyr'))
|
||||
# os.remove(os.path.join(lvgl_cwd, '.codecov.yml'))
|
||||
# os.remove(os.path.join(lvgl_cwd, '.editorconfig'))
|
||||
# os.remove(os.path.join(lvgl_cwd, '.gitignore'))
|
||||
# os.remove(os.path.join(lvgl_cwd, '.gitmodules'))
|
||||
# os.remove(os.path.join(lvgl_cwd, 'CMakeLists.txt'))
|
||||
# os.remove(os.path.join(lvgl_cwd, 'component.mk'))
|
||||
# os.remove(os.path.join(lvgl_cwd, 'idf_component.yml'))
|
||||
# os.remove(os.path.join(lvgl_cwd, 'Kconfig'))
|
||||
# os.remove(os.path.join(lvgl_cwd, 'library.json'))
|
||||
# os.remove(os.path.join(lvgl_cwd, 'library.properties'))
|
||||
# os.remove(os.path.join(lvgl_cwd, 'lv_conf_template.h'))
|
||||
# os.remove(os.path.join(lvgl_cwd, 'lvgl.mk'))
|
||||
# except:
|
||||
# pass
|
||||
#
|
||||
|
||||
Return('group')
|
||||
|
|
|
|||
|
|
@ -16,69 +16,12 @@
|
|||
#define LV_RTTHREAD_INCLUDE <rtthread.h>
|
||||
#include LV_RTTHREAD_INCLUDE
|
||||
|
||||
/*=========================
|
||||
MEMORY SETTINGS
|
||||
*=========================*/
|
||||
|
||||
#ifdef RT_USING_HEAP
|
||||
# define LV_MEM_CUSTOM 1
|
||||
# define LV_MEM_CUSTOM_INCLUDE LV_RTTHREAD_INCLUDE
|
||||
# define LV_MEM_CUSTOM_ALLOC rt_malloc
|
||||
# define LV_MEM_CUSTOM_FREE rt_free
|
||||
# define LV_MEM_CUSTOM_REALLOC rt_realloc
|
||||
#endif
|
||||
|
||||
/*====================
|
||||
HAL SETTINGS
|
||||
*====================*/
|
||||
|
||||
#define LV_TICK_CUSTOM 1
|
||||
#define LV_TICK_CUSTOM_INCLUDE LV_RTTHREAD_INCLUDE
|
||||
#define LV_TICK_CUSTOM_SYS_TIME_EXPR (rt_tick_get_millisecond()) /*Expression evaluating to current system time in ms*/
|
||||
|
||||
/*=======================
|
||||
* FEATURE CONFIGURATION
|
||||
*=======================*/
|
||||
|
||||
/*-------------
|
||||
* Logging
|
||||
*-----------*/
|
||||
|
||||
#ifdef PKG_LVGL_ENABLE_LOG
|
||||
# define LV_USE_LOG 1
|
||||
# define LV_LOG_PRINTF 0
|
||||
#else
|
||||
# define LV_USE_LOG 0
|
||||
#endif
|
||||
|
||||
/*-------------
|
||||
* Asserts
|
||||
*-----------*/
|
||||
|
||||
#define LV_ASSERT_HANDLER_INCLUDE LV_RTTHREAD_INCLUDE
|
||||
#define LV_ASSERT_HANDLER RT_ASSERT(0);
|
||||
|
||||
/*-------------
|
||||
* Others
|
||||
*-----------*/
|
||||
|
||||
#define LV_SPRINTF_CUSTOM 1
|
||||
#define LV_SPRINTF_INCLUDE LV_RTTHREAD_INCLUDE
|
||||
#ifdef __ARMCC_VERSION
|
||||
#define lv_snprintf rt_snprintf
|
||||
#define lv_vsnprintf rt_vsnprintf
|
||||
#define LV_SPRINTF_USE_FLOAT 0
|
||||
|
||||
/*=====================
|
||||
* COMPILER SETTINGS
|
||||
*====================*/
|
||||
|
||||
#ifdef RT_USING_BIG_ENDIAN
|
||||
# define LV_BIG_ENDIAN_SYSTEM 1
|
||||
#else
|
||||
# define LV_BIG_ENDIAN_SYSTEM 0
|
||||
#endif
|
||||
|
||||
#define LV_ATTRIBUTE_MEM_ALIGN ALIGN(4)
|
||||
|
||||
|
||||
/*--END OF LV_RT_THREAD_CONF_H--*/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,52 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2006-2021, RT-Thread Development Team
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
* 2021-10-18 Meco Man The first version
|
||||
*/
|
||||
|
||||
#ifdef __RTTHREAD__
|
||||
|
||||
#include <rtthread.h>
|
||||
#include <lvgl.h>
|
||||
#define DBG_TAG "LVGL"
|
||||
#define DBG_LVL DBG_INFO
|
||||
#include <rtdbg.h>
|
||||
|
||||
#ifndef PKG_USING_LVGL_DISP_DEVICE
|
||||
# include <lv_port_disp.h>
|
||||
#endif
|
||||
#ifndef PKG_USING_LVGL_INDEV_DEVICE
|
||||
# include <lv_port_indev.h>
|
||||
#endif
|
||||
|
||||
#if LV_USE_LOG && LV_LOG_PRINTF
|
||||
static void lv_rt_log(const char *buf)
|
||||
{
|
||||
LOG_I(buf);
|
||||
}
|
||||
#endif
|
||||
|
||||
static int lv_port_init(void)
|
||||
{
|
||||
#if LV_USE_LOG && LV_LOG_PRINTF
|
||||
lv_log_register_print_cb(lv_rt_log);
|
||||
#endif
|
||||
|
||||
lv_init();
|
||||
|
||||
#ifndef PKG_USING_LVGL_DISP_DEVICE
|
||||
lv_port_disp_init();
|
||||
#endif
|
||||
#ifndef PKG_USING_LVGL_INDEV_DEVICE
|
||||
lv_port_indev_init();
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
INIT_COMPONENT_EXPORT(lv_port_init);
|
||||
|
||||
#endif /*__RTTHREAD__*/
|
||||
|
|
@ -547,6 +547,7 @@ static size_t _etoa(out_fct_type out, char * buffer, size_t idx, size_t maxlen,
|
|||
#endif // PRINTF_SUPPORT_FLOAT
|
||||
|
||||
// internal vsnprintf
|
||||
#ifndef __ARMCC_VERSION
|
||||
static int _vsnprintf(out_fct_type out, char * buffer, const size_t maxlen, const char * format, va_list va)
|
||||
{
|
||||
unsigned int flags, width, precision, n;
|
||||
|
|
@ -859,9 +860,9 @@ static int _vsnprintf(out_fct_type out, char * buffer, const size_t maxlen, cons
|
|||
// return written chars without terminating \0
|
||||
return (int)idx;
|
||||
}
|
||||
|
||||
#endif
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef __ARMCC_VERSION
|
||||
int lv_snprintf(char * buffer, size_t count, const char * format, ...)
|
||||
{
|
||||
va_list va;
|
||||
|
|
@ -875,5 +876,5 @@ int lv_vsnprintf(char * buffer, size_t count, const char * format, va_list va)
|
|||
{
|
||||
return _vsnprintf(_out_buffer, buffer, count, format, va);
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif /*LV_SPRINTF_CUSTOM*/
|
||||
|
|
|
|||
|
|
@ -78,8 +78,9 @@ typedef struct {
|
|||
* null character. A value equal or larger than count indicates truncation. Only when the returned value
|
||||
* is non-negative and less than count, the string has been completely written.
|
||||
*/
|
||||
int lv_snprintf(char * buffer, size_t count, const char * format, ...) LV_FORMAT_ATTRIBUTE(3, 4);
|
||||
int lv_vsnprintf(char * buffer, size_t count, const char * format, va_list va) LV_FORMAT_ATTRIBUTE(3, 0);
|
||||
|
||||
//int lv_snprintf(char * buffer, size_t count, const char * format, ...) LV_FORMAT_ATTRIBUTE(3, 4);
|
||||
//int lv_vsnprintf(char * buffer, size_t count, const char * format, va_list va) LV_FORMAT_ATTRIBUTE(3, 0);
|
||||
|
||||
#else
|
||||
#include LV_SPRINTF_INCLUDE
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ CONFIG_RTT_DIR="../../rt-thread"
|
|||
#
|
||||
# RT-Thread Kernel
|
||||
#
|
||||
CONFIG_RT_NAME_MAX=8
|
||||
CONFIG_RT_NAME_MAX=12
|
||||
# CONFIG_RT_USING_BIG_ENDIAN is not set
|
||||
# CONFIG_RT_USING_ARCH_DATA_TYPE is not set
|
||||
# CONFIG_RT_USING_SMP is not set
|
||||
|
|
@ -167,7 +167,7 @@ CONFIG_RT_USING_SERIAL=y
|
|||
CONFIG_RT_USING_SERIAL_V1=y
|
||||
# CONFIG_RT_USING_SERIAL_V2 is not set
|
||||
# CONFIG_RT_SERIAL_USING_DMA is not set
|
||||
CONFIG_RT_SERIAL_RB_BUFSZ=64
|
||||
CONFIG_RT_SERIAL_RB_BUFSZ=256
|
||||
CONFIG_RT_USING_CAN=y
|
||||
# CONFIG_RT_CAN_USING_HDR is not set
|
||||
# CONFIG_RT_USING_HWTIMER is not set
|
||||
|
|
@ -239,7 +239,15 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8
|
|||
#
|
||||
# Network interface device
|
||||
#
|
||||
# CONFIG_RT_USING_NETDEV is not set
|
||||
CONFIG_RT_USING_NETDEV=y
|
||||
CONFIG_NETDEV_USING_IFCONFIG=y
|
||||
CONFIG_NETDEV_USING_PING=y
|
||||
CONFIG_NETDEV_USING_NETSTAT=y
|
||||
CONFIG_NETDEV_USING_AUTO_DEFAULT=y
|
||||
# CONFIG_NETDEV_USING_IPV6 is not set
|
||||
CONFIG_NETDEV_IPV4=1
|
||||
CONFIG_NETDEV_IPV6=0
|
||||
# CONFIG_NETDEV_IPV6_SCOPES is not set
|
||||
|
||||
#
|
||||
# light weight TCP/IP stack
|
||||
|
|
@ -283,7 +291,7 @@ CONFIG_BSP_USING_UART1=y
|
|||
CONFIG_BSP_USING_UART2=y
|
||||
CONFIG_BSP_USING_UART3=y
|
||||
# CONFIG_BSP_USING_UART4 is not set
|
||||
# CONFIG_BSP_USING_I2C1 is not set
|
||||
CONFIG_BSP_USING_I2C1=y
|
||||
# CONFIG_BSP_USING_SPI is not set
|
||||
# CONFIG_BSP_USING_CH438 is not set
|
||||
CONFIG_BSP_USING_USB=y
|
||||
|
|
@ -304,6 +312,9 @@ CONFIG_USB_DEVICE_NAME="usb_dev"
|
|||
#
|
||||
# CONFIG_PKG_USING_RW007 is not set
|
||||
# CONFIG_DRV_USING_OV2640 is not set
|
||||
# CONFIG_DRV_USING_HS300X is not set
|
||||
# CONFIG_DRV_USING_SX1278 is not set
|
||||
# CONFIG_PKG_USING_WIZNET is not set
|
||||
|
||||
#
|
||||
# APP_Framework
|
||||
|
|
@ -316,23 +327,20 @@ CONFIG_TRANSFORM_LAYER_ATTRIUBUTE=y
|
|||
# CONFIG_ADD_XIZI_FETURES is not set
|
||||
# CONFIG_ADD_NUTTX_FETURES is not set
|
||||
CONFIG_ADD_RTTHREAD_FETURES=y
|
||||
# CONFIG_SUPPORT_SENSOR_FRAMEWORK is not set
|
||||
CONFIG_SUPPORT_CONNECTION_FRAMEWORK=y
|
||||
CONFIG_CONNECTION_FRAMEWORK_DEBUG=y
|
||||
# CONFIG_CONNECTION_INDUSTRIAL_ETHERNET is not set
|
||||
# CONFIG_CONNECTION_INDUSTRIAL_FIELDBUS is not set
|
||||
# CONFIG_CONNECTION_INDUSTRIAL_WLAN is not set
|
||||
# CONFIG_CONNECTION_ADAPTER_LORA is not set
|
||||
# CONFIG_CONNECTION_ADAPTER_4G is not set
|
||||
# CONFIG_CONNECTION_ADAPTER_NB is not set
|
||||
# CONFIG_CONNECTION_ADAPTER_WIFI is not set
|
||||
CONFIG_ADAPTER_HFA21_DRIVER="/dev/uart3"
|
||||
CONFIG_CONNECTION_ADAPTER_ETHERNET=y
|
||||
CONFIG_ADAPTER_HFA21_ETHERNET=y
|
||||
CONFIG_ADAPTER_ETHERNET_HFA21="hfa21_ethernet"
|
||||
# CONFIG_CONNECTION_ADAPTER_BLUETOOTH is not set
|
||||
# CONFIG_CONNECTION_ADAPTER_ZIGBEE is not set
|
||||
# CONFIG_CONNECTION_ADAPTER_5G is not set
|
||||
CONFIG_SUPPORT_SENSOR_FRAMEWORK=y
|
||||
# CONFIG_SENSOR_HCHO is not set
|
||||
# CONFIG_SENSOR_TVOC is not set
|
||||
# CONFIG_SENSOR_IAQ is not set
|
||||
# CONFIG_SENSOR_CH4 is not set
|
||||
# CONFIG_SENSOR_CO2 is not set
|
||||
# CONFIG_SENSOR_PM is not set
|
||||
# CONFIG_SENSOR_VOICE is not set
|
||||
# CONFIG_SENSOR_TEMPERATURE is not set
|
||||
# CONFIG_SENSOR_HUMIDITY is not set
|
||||
# CONFIG_SENSOR_WINDSPEED is not set
|
||||
# CONFIG_SENSOR_WINDDIRECTION is not set
|
||||
# CONFIG_SENSOR_ALTITUDE is not set
|
||||
# CONFIG_SUPPORT_CONNECTION_FRAMEWORK is not set
|
||||
# CONFIG_SUPPORT_KNOWING_FRAMEWORK is not set
|
||||
# CONFIG_SUPPORT_CONTROL_FRAMEWORK is not set
|
||||
|
||||
|
|
@ -340,6 +348,7 @@ CONFIG_ADAPTER_ETHERNET_HFA21="hfa21_ethernet"
|
|||
# Security
|
||||
#
|
||||
# CONFIG_CRYPTO is not set
|
||||
# CONFIG_MBEDTLS is not set
|
||||
|
||||
#
|
||||
# Applications
|
||||
|
|
@ -377,7 +386,21 @@ CONFIG_MAIN_KTASK_STACK_SIZE=1024
|
|||
#
|
||||
# sensor app
|
||||
#
|
||||
# CONFIG_APPLICATION_SENSOR is not set
|
||||
CONFIG_APPLICATION_SENSOR=y
|
||||
# CONFIG_APPLICATION_SENSOR_HCHO is not set
|
||||
# CONFIG_APPLICATION_SENSOR_TVOC is not set
|
||||
# CONFIG_APPLICATION_SENSOR_IAQ is not set
|
||||
# CONFIG_APPLICATION_SENSOR_CH4 is not set
|
||||
# CONFIG_APPLICATION_SENSOR_CO2 is not set
|
||||
# CONFIG_APPLICATION_SENSOR_PM1_0 is not set
|
||||
# CONFIG_APPLICATION_SENSOR_PM2_5 is not set
|
||||
# CONFIG_APPLICATION_SENSOR_PM10 is not set
|
||||
# CONFIG_APPLICATION_SENSOR_VOICE is not set
|
||||
# CONFIG_APPLICATION_SENSOR_TEMPERATURE is not set
|
||||
# CONFIG_APPLICATION_SENSOR_HUMIDITY is not set
|
||||
# CONFIG_APPLICATION_SENSOR_WINDDIRECTION is not set
|
||||
# CONFIG_APPLICATION_SENSOR_WINDSPEED is not set
|
||||
# CONFIG_APPLICATION_SENSOR_ALTITUDE is not set
|
||||
# CONFIG_USING_EMBEDDED_DATABASE_APP is not set
|
||||
# CONFIG_APP_USING_WEBNET is not set
|
||||
|
||||
|
|
@ -389,4 +412,9 @@ CONFIG_APP_SELECT_NEWLIB=y
|
|||
# CONFIG_LIB_USING_CJSON is not set
|
||||
# CONFIG_LIB_USING_QUEUE is not set
|
||||
# CONFIG_LIB_LV is not set
|
||||
|
||||
#
|
||||
# LVGL configuration
|
||||
#
|
||||
# CONFIG_LV_CONF_MINIMAL is not set
|
||||
# CONFIG_USING_EMBEDDED_DATABASE is not set
|
||||
|
|
|
|||
|
|
@ -33,14 +33,98 @@
|
|||
#endif
|
||||
|
||||
#define LED0_PIN GET_PIN(G, 15)
|
||||
extern int FrameworkInit();
|
||||
extern int FrameworkInit(void);
|
||||
int main(void)
|
||||
{
|
||||
int count = 1;
|
||||
rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);
|
||||
rt_thread_mdelay(100);
|
||||
FrameworkInit();
|
||||
printf("XIUOS stm32f4 build %s %s\n",__DATE__,__TIME__);
|
||||
printf("XIUOS stm32f4 build %s %s\n",__DATE__,__TIME__);
|
||||
|
||||
#ifdef APPLICATION_SENSOR_ALTITUDE_BMP180
|
||||
extern int AltitudeBmp180();
|
||||
AltitudeBmp180();
|
||||
#endif
|
||||
|
||||
#ifdef APPLICATION_SENSOR_CH4_AS830
|
||||
extern void Ch4As830();
|
||||
Ch4As830();
|
||||
#endif
|
||||
|
||||
#ifdef APPLICATION_SENSOR_TVOC_TB600B_TVOC10
|
||||
extern void TvocTb600bTvoc10();
|
||||
TvocTb600bTvoc10();
|
||||
#endif
|
||||
|
||||
#ifdef APPLICATION_SENSOR_CO2_G8S
|
||||
extern void Co2G8s();
|
||||
printf("Waiting for Co2G8s to start...\n");
|
||||
rt_thread_mdelay(9000);
|
||||
Co2G8s();
|
||||
#endif
|
||||
|
||||
#ifdef APPLICATION_SENSOR_CO2_ZG09
|
||||
extern void Co2Zg09();
|
||||
printf("Waiting for Co2ZG09 to start...\n");
|
||||
rt_thread_mdelay(8000);
|
||||
Co2Zg09();
|
||||
#endif
|
||||
|
||||
#ifdef APPLICATION_SENSOR_PM1_0_PS5308
|
||||
extern void Pm10Ps5308();
|
||||
Pm10Ps5308();
|
||||
#endif
|
||||
|
||||
#ifdef APPLICATION_SENSOR_PM2_5_PS5308
|
||||
extern void Pm25Ps5308();
|
||||
Pm25Ps5308();
|
||||
#endif
|
||||
|
||||
#ifdef APPLICATION_SENSOR_PM10_PS5308
|
||||
extern void Pm100Ps5308();
|
||||
Pm100Ps5308();
|
||||
#endif
|
||||
|
||||
#ifdef APPLICATION_SENSOR_TEMPERATURE_HS300X
|
||||
extern void TempHs300x();
|
||||
TempHs300x();
|
||||
#endif
|
||||
|
||||
#ifdef APPLICATION_SENSOR_HUMIDITY_HS300X
|
||||
extern void HumiHs300x();
|
||||
HumiHs300x();
|
||||
#endif
|
||||
|
||||
#ifdef APPLICATION_SENSOR_HCHO_TB600B_WQ_HCHO1OS
|
||||
extern void HchoTb600bHcho1os();
|
||||
printf("Waiting for HchoTb600bHcho1os to start...\n");
|
||||
rt_thread_mdelay(10000);
|
||||
HchoTb600bHcho1os();
|
||||
#endif
|
||||
|
||||
#ifdef APPLICATION_SENSOR_IAQ_TB600B_IAQ10
|
||||
extern void IaqTb600bIaq10();
|
||||
printf("Waiting for IaqTb600bIaq10 to start...\n");
|
||||
rt_thread_mdelay(9000);
|
||||
IaqTb600bIaq10();
|
||||
#endif
|
||||
|
||||
#ifdef APPLICATION_SENSOR_VOICE_D124
|
||||
extern void VoiceD124();
|
||||
VoiceD124();
|
||||
#endif
|
||||
|
||||
#ifdef APPLICATION_SENSOR_WINDDIRECTION_QS_FX
|
||||
extern void WindDirectionQsFx();
|
||||
WindDirectionQsFx();
|
||||
#endif
|
||||
|
||||
#ifdef APPLICATION_SENSOR_WINDSPEED_QS_FS
|
||||
extern void WindSpeedQsFs();
|
||||
WindSpeedQsFs();
|
||||
#endif
|
||||
|
||||
while (count++)
|
||||
{
|
||||
rt_pin_write(LED0_PIN, PIN_HIGH);
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ cwd = GetCurrentDir()
|
|||
# add general drivers
|
||||
src = Split('''
|
||||
board.c
|
||||
ch438.c
|
||||
CubeMX_Config/Src/stm32f4xx_hal_msp.c
|
||||
''')
|
||||
|
||||
|
|
|
|||
|
|
@ -40,6 +40,9 @@ extern int __bss_end;
|
|||
|
||||
#define HEAP_END STM32_SRAM_END
|
||||
|
||||
#define BSP_I2C1_SCL_PIN GET_PIN(B,6)
|
||||
#define BSP_I2C1_SDA_PIN GET_PIN(B,7)
|
||||
|
||||
void SystemClock_Config(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
|||
|
|
@ -0,0 +1,614 @@
|
|||
#include <rtthread.h>
|
||||
#include <rtdevice.h>
|
||||
#include "ch438.h"
|
||||
#include <math.h>
|
||||
|
||||
/* Offset address of serial port number */
|
||||
static rt_uint8_t offsetadd[] = {0x00,0x10,0x20,0x30,0x08,0x18,0x28,0x38,};
|
||||
struct rt_serial_device *extuart_serial_parm[8];
|
||||
|
||||
static void CH438_udelay(rt_uint64_t us)
|
||||
{
|
||||
rt_uint64_t ticks;
|
||||
rt_uint64_t told, tnow, tcnt = 0;
|
||||
rt_uint64_t reload = SysTick->LOAD;
|
||||
|
||||
ticks = us * reload / (1000000 / RT_TICK_PER_SECOND);
|
||||
told = SysTick->VAL;
|
||||
while (1) {
|
||||
tnow = SysTick->VAL;
|
||||
if (tnow != told) {
|
||||
if (tnow < told) {
|
||||
tcnt += told - tnow;
|
||||
}
|
||||
else {
|
||||
tcnt += reload - tnow + told;
|
||||
}
|
||||
told = tnow;
|
||||
if (tcnt >= ticks) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CH438_INIT(void)
|
||||
{
|
||||
CH438_set_output();
|
||||
rt_pin_mode(CH438_NWR_PIN, PIN_MODE_OUTPUT);
|
||||
rt_pin_mode(CH438_NRD_PIN, PIN_MODE_OUTPUT);
|
||||
rt_pin_mode(CH438_NCS_PIN, PIN_MODE_OUTPUT);
|
||||
rt_pin_mode(CH438_ALE_PIN, PIN_MODE_OUTPUT);
|
||||
rt_pin_mode(DIR_485CH1_PIN, PIN_MODE_OUTPUT);
|
||||
rt_pin_mode(DIR_485CH2_PIN, PIN_MODE_OUTPUT);
|
||||
rt_pin_mode(DIR_485CH3_PIN, PIN_MODE_OUTPUT);
|
||||
rt_pin_mode(CH438_INT_PIN, PIN_MODE_INPUT_PULLUP);
|
||||
|
||||
rt_pin_write(CH438_NWR_PIN, PIN_HIGH);
|
||||
rt_pin_write(CH438_NRD_PIN, PIN_HIGH);
|
||||
rt_pin_write(CH438_NCS_PIN, PIN_HIGH);
|
||||
rt_pin_write(CH438_ALE_PIN, PIN_HIGH);
|
||||
}
|
||||
|
||||
void CH438_PORT_INIT( rt_uint8_t ext_uart_no,rt_uint32_t BaudRate )
|
||||
{
|
||||
rt_uint32_t div;
|
||||
rt_uint8_t DLL,DLM,dlab;
|
||||
rt_uint8_t REG_LCR_ADDR;
|
||||
rt_uint8_t REG_DLL_ADDR;
|
||||
rt_uint8_t REG_DLM_ADDR;
|
||||
rt_uint8_t REG_IER_ADDR;
|
||||
rt_uint8_t REG_MCR_ADDR;
|
||||
rt_uint8_t REG_FCR_ADDR;
|
||||
|
||||
REG_LCR_ADDR = offsetadd[ext_uart_no] | REG_LCR0_ADDR;
|
||||
REG_DLL_ADDR = offsetadd[ext_uart_no] | REG_DLL0_ADDR;
|
||||
REG_DLM_ADDR = offsetadd[ext_uart_no] | REG_DLM0_ADDR;
|
||||
REG_IER_ADDR = offsetadd[ext_uart_no] | REG_IER0_ADDR;
|
||||
REG_MCR_ADDR = offsetadd[ext_uart_no] | REG_MCR0_ADDR;
|
||||
REG_FCR_ADDR = offsetadd[ext_uart_no] | REG_FCR0_ADDR;
|
||||
|
||||
/* Reset the serial port */
|
||||
WriteCH438Data( REG_IER_ADDR, BIT_IER_RESET );
|
||||
rt_thread_mdelay(50);
|
||||
|
||||
dlab = ReadCH438Data(REG_IER_ADDR);
|
||||
dlab &= 0xDF;
|
||||
WriteCH438Data(REG_IER_ADDR, dlab);
|
||||
|
||||
/* set LCR register DLAB bit 1 */
|
||||
dlab = ReadCH438Data(REG_LCR_ADDR);
|
||||
dlab |= 0x80;
|
||||
WriteCH438Data(REG_LCR_ADDR, dlab);
|
||||
|
||||
div = ( Fpclk >> 4 ) / BaudRate;
|
||||
DLM = div >> 8;
|
||||
DLL = div & 0xff;
|
||||
|
||||
/* Set baud rate */
|
||||
WriteCH438Data( REG_DLL_ADDR, DLL );
|
||||
WriteCH438Data( REG_DLM_ADDR, DLM );
|
||||
|
||||
/* set FIFO mode, 112 bytes */
|
||||
WriteCH438Data( REG_FCR_ADDR, BIT_FCR_RECVTG1 | BIT_FCR_RECVTG0 | BIT_FCR_FIFOEN );
|
||||
|
||||
/* 8 bit word size, 1 bit stop bit, no crc */
|
||||
WriteCH438Data( REG_LCR_ADDR, BIT_LCR_WORDSZ1 | BIT_LCR_WORDSZ0 );
|
||||
|
||||
/* enable interrupt */
|
||||
WriteCH438Data( REG_IER_ADDR, BIT_IER_IERECV );
|
||||
|
||||
/* allow interrupt output, DTR and RTS is 1 */
|
||||
WriteCH438Data( REG_MCR_ADDR, BIT_MCR_OUT2 );
|
||||
|
||||
/* release the data in FIFO */
|
||||
WriteCH438Data( REG_FCR_ADDR,ReadCH438Data(REG_FCR_ADDR)| BIT_FCR_TFIFORST );
|
||||
}
|
||||
|
||||
static void CH438_set_output(void)
|
||||
{
|
||||
rt_pin_mode(CH438_D0_PIN, PIN_MODE_OUTPUT);
|
||||
rt_pin_mode(CH438_D1_PIN, PIN_MODE_OUTPUT);
|
||||
rt_pin_mode(CH438_D2_PIN, PIN_MODE_OUTPUT);
|
||||
rt_pin_mode(CH438_D3_PIN, PIN_MODE_OUTPUT);
|
||||
rt_pin_mode(CH438_D4_PIN, PIN_MODE_OUTPUT);
|
||||
rt_pin_mode(CH438_D5_PIN, PIN_MODE_OUTPUT);
|
||||
rt_pin_mode(CH438_D6_PIN, PIN_MODE_OUTPUT);
|
||||
rt_pin_mode(CH438_D7_PIN, PIN_MODE_OUTPUT);
|
||||
}
|
||||
|
||||
static void CH438_set_input(void)
|
||||
{
|
||||
rt_pin_mode(CH438_D0_PIN, PIN_MODE_INPUT_PULLUP);
|
||||
rt_pin_mode(CH438_D1_PIN, PIN_MODE_INPUT_PULLUP);
|
||||
rt_pin_mode(CH438_D2_PIN, PIN_MODE_INPUT_PULLUP);
|
||||
rt_pin_mode(CH438_D3_PIN, PIN_MODE_INPUT_PULLUP);
|
||||
rt_pin_mode(CH438_D4_PIN, PIN_MODE_INPUT_PULLUP);
|
||||
rt_pin_mode(CH438_D5_PIN, PIN_MODE_INPUT_PULLUP);
|
||||
rt_pin_mode(CH438_D6_PIN, PIN_MODE_INPUT_PULLUP);
|
||||
rt_pin_mode(CH438_D7_PIN, PIN_MODE_INPUT_PULLUP);
|
||||
}
|
||||
|
||||
void set_485_input(rt_uint8_t ch_no)
|
||||
{
|
||||
if(ch_no == 1) {
|
||||
rt_pin_write(DIR_485CH1_PIN, PIN_LOW);
|
||||
}
|
||||
|
||||
if(ch_no == 2) {
|
||||
rt_pin_write(DIR_485CH2_PIN, PIN_LOW);
|
||||
}
|
||||
|
||||
if(ch_no == 3) {
|
||||
rt_pin_write(DIR_485CH3_PIN, PIN_LOW);
|
||||
}
|
||||
}
|
||||
|
||||
void set_485_output(rt_uint8_t ch_no)
|
||||
{
|
||||
if(ch_no == 1) {
|
||||
rt_pin_write(DIR_485CH1_PIN, PIN_HIGH);
|
||||
}
|
||||
|
||||
if(ch_no == 2) {
|
||||
rt_pin_write(DIR_485CH2_PIN, PIN_HIGH);
|
||||
}
|
||||
|
||||
if(ch_no == 3) {
|
||||
rt_pin_write(DIR_485CH3_PIN, PIN_HIGH);
|
||||
}
|
||||
}
|
||||
|
||||
rt_uint8_t ReadCH438Data( rt_uint8_t addr )
|
||||
{
|
||||
rt_uint8_t dat = 0;
|
||||
rt_pin_write(CH438_NWR_PIN, PIN_HIGH);
|
||||
rt_pin_write(CH438_NRD_PIN, PIN_HIGH);
|
||||
rt_pin_write(CH438_ALE_PIN, PIN_HIGH);
|
||||
rt_pin_write(CH438_NCS_PIN, PIN_HIGH);
|
||||
|
||||
CH438_set_output();
|
||||
CH438_udelay(1);
|
||||
|
||||
if(addr &0x80) rt_pin_write(CH438_D7_PIN,PIN_HIGH); else rt_pin_write(CH438_D7_PIN,PIN_LOW);
|
||||
if(addr &0x40) rt_pin_write(CH438_D6_PIN,PIN_HIGH); else rt_pin_write(CH438_D6_PIN,PIN_LOW);
|
||||
if(addr &0x20) rt_pin_write(CH438_D5_PIN,PIN_HIGH); else rt_pin_write(CH438_D5_PIN,PIN_LOW);
|
||||
if(addr &0x10) rt_pin_write(CH438_D4_PIN,PIN_HIGH); else rt_pin_write(CH438_D4_PIN,PIN_LOW);
|
||||
if(addr &0x08) rt_pin_write(CH438_D3_PIN,PIN_HIGH); else rt_pin_write(CH438_D3_PIN,PIN_LOW);
|
||||
if(addr &0x04) rt_pin_write(CH438_D2_PIN,PIN_HIGH); else rt_pin_write(CH438_D2_PIN,PIN_LOW);
|
||||
if(addr &0x02) rt_pin_write(CH438_D1_PIN,PIN_HIGH); else rt_pin_write(CH438_D1_PIN,PIN_LOW);
|
||||
if(addr &0x01) rt_pin_write(CH438_D0_PIN,PIN_HIGH); else rt_pin_write(CH438_D0_PIN,PIN_LOW);
|
||||
|
||||
CH438_udelay(1);
|
||||
|
||||
rt_pin_write(CH438_ALE_PIN,PIN_LOW);
|
||||
CH438_udelay(1);
|
||||
rt_pin_write(CH438_NCS_PIN, PIN_LOW);
|
||||
CH438_udelay(1);
|
||||
|
||||
CH438_set_input();
|
||||
CH438_udelay(1);
|
||||
|
||||
rt_pin_write(CH438_NRD_PIN,PIN_LOW);
|
||||
CH438_udelay(1);
|
||||
|
||||
if (rt_pin_read(CH438_D7_PIN)) dat |= 0x80;
|
||||
if (rt_pin_read(CH438_D6_PIN)) dat |= 0x40;
|
||||
if (rt_pin_read(CH438_D5_PIN)) dat |= 0x20;
|
||||
if (rt_pin_read(CH438_D4_PIN)) dat |= 0x10;
|
||||
if (rt_pin_read(CH438_D3_PIN)) dat |= 0x08;
|
||||
if (rt_pin_read(CH438_D2_PIN)) dat |= 0x04;
|
||||
if (rt_pin_read(CH438_D1_PIN)) dat |= 0x02;
|
||||
if (rt_pin_read(CH438_D0_PIN)) dat |= 0x01;
|
||||
|
||||
rt_pin_write(CH438_NRD_PIN,PIN_HIGH);
|
||||
rt_pin_write(CH438_ALE_PIN,PIN_HIGH);
|
||||
rt_pin_write(CH438_NCS_PIN,PIN_HIGH);
|
||||
CH438_udelay(1);
|
||||
|
||||
return dat;
|
||||
}
|
||||
|
||||
static void WriteCH438Data( rt_uint8_t addr, char dat )
|
||||
{
|
||||
rt_pin_write(CH438_ALE_PIN, PIN_HIGH);
|
||||
rt_pin_write(CH438_NWR_PIN, PIN_HIGH);
|
||||
rt_pin_write(CH438_NRD_PIN, PIN_HIGH);
|
||||
rt_pin_write(CH438_NCS_PIN, PIN_HIGH);
|
||||
|
||||
CH438_set_output();
|
||||
CH438_udelay(1);
|
||||
|
||||
if(addr &0x80) rt_pin_write(CH438_D7_PIN,PIN_HIGH); else rt_pin_write(CH438_D7_PIN,PIN_LOW);
|
||||
if(addr &0x40) rt_pin_write(CH438_D6_PIN,PIN_HIGH); else rt_pin_write(CH438_D6_PIN,PIN_LOW);
|
||||
if(addr &0x20) rt_pin_write(CH438_D5_PIN,PIN_HIGH); else rt_pin_write(CH438_D5_PIN,PIN_LOW);
|
||||
if(addr &0x10) rt_pin_write(CH438_D4_PIN,PIN_HIGH); else rt_pin_write(CH438_D4_PIN,PIN_LOW);
|
||||
if(addr &0x08) rt_pin_write(CH438_D3_PIN,PIN_HIGH); else rt_pin_write(CH438_D3_PIN,PIN_LOW);
|
||||
if(addr &0x04) rt_pin_write(CH438_D2_PIN,PIN_HIGH); else rt_pin_write(CH438_D2_PIN,PIN_LOW);
|
||||
if(addr &0x02) rt_pin_write(CH438_D1_PIN,PIN_HIGH); else rt_pin_write(CH438_D1_PIN,PIN_LOW);
|
||||
if(addr &0x01) rt_pin_write(CH438_D0_PIN,PIN_HIGH); else rt_pin_write(CH438_D0_PIN,PIN_LOW);
|
||||
|
||||
CH438_udelay(1);
|
||||
|
||||
rt_pin_write(CH438_ALE_PIN,PIN_LOW);
|
||||
CH438_udelay(1);
|
||||
rt_pin_write(CH438_NCS_PIN, PIN_LOW);
|
||||
CH438_udelay(1);
|
||||
|
||||
if(dat &0x80) rt_pin_write(CH438_D7_PIN,PIN_HIGH); else rt_pin_write(CH438_D7_PIN,PIN_LOW);
|
||||
if(dat &0x40) rt_pin_write(CH438_D6_PIN,PIN_HIGH); else rt_pin_write(CH438_D6_PIN,PIN_LOW);
|
||||
if(dat &0x20) rt_pin_write(CH438_D5_PIN,PIN_HIGH); else rt_pin_write(CH438_D5_PIN,PIN_LOW);
|
||||
if(dat &0x10) rt_pin_write(CH438_D4_PIN,PIN_HIGH); else rt_pin_write(CH438_D4_PIN,PIN_LOW);
|
||||
if(dat &0x08) rt_pin_write(CH438_D3_PIN,PIN_HIGH); else rt_pin_write(CH438_D3_PIN,PIN_LOW);
|
||||
if(dat &0x04) rt_pin_write(CH438_D2_PIN,PIN_HIGH); else rt_pin_write(CH438_D2_PIN,PIN_LOW);
|
||||
if(dat &0x02) rt_pin_write(CH438_D1_PIN,PIN_HIGH); else rt_pin_write(CH438_D1_PIN,PIN_LOW);
|
||||
if(dat &0x01) rt_pin_write(CH438_D0_PIN,PIN_HIGH); else rt_pin_write(CH438_D0_PIN,PIN_LOW);
|
||||
|
||||
CH438_udelay(1);
|
||||
|
||||
rt_pin_write(CH438_NWR_PIN,PIN_LOW);
|
||||
CH438_udelay(1);
|
||||
|
||||
rt_pin_write(CH438_NWR_PIN,PIN_HIGH);
|
||||
rt_pin_write(CH438_ALE_PIN,PIN_HIGH);
|
||||
rt_pin_write(CH438_NCS_PIN,PIN_HIGH);
|
||||
CH438_udelay(1);
|
||||
|
||||
CH438_set_input();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void WriteCH438Block( rt_uint8_t mAddr, rt_uint8_t mLen, char *mBuf )
|
||||
{
|
||||
while ( mLen -- ) {
|
||||
WriteCH438Data( mAddr, *mBuf++ );
|
||||
}
|
||||
}
|
||||
|
||||
static void CH438Irq(void *parameter)
|
||||
{
|
||||
rt_uint8_t gInterruptStatus;
|
||||
rt_uint8_t port = 0;
|
||||
/* multi irq may happen*/
|
||||
gInterruptStatus = ReadCH438Data(REG_SSR_ADDR);
|
||||
port = log(gInterruptStatus & 0xFF)/log(2);
|
||||
|
||||
rt_hw_serial_isr(extuart_serial_parm[port], RT_SERIAL_EVENT_RX_IND);
|
||||
}
|
||||
|
||||
static rt_err_t rt_extuart_configure(struct rt_serial_device *serial, struct serial_configure *cfg)
|
||||
{
|
||||
rt_uint32_t baud_rate = cfg->baud_rate;
|
||||
rt_uint16_t port = cfg->reserved;
|
||||
|
||||
CH438_PORT_INIT(port, baud_rate);
|
||||
return RT_EOK;
|
||||
}
|
||||
|
||||
static rt_err_t extuart_control(struct rt_serial_device *serial, int cmd, void *arg)
|
||||
{
|
||||
static rt_uint16_t register_flag = 0;
|
||||
|
||||
switch (cmd)
|
||||
{
|
||||
case RT_DEVICE_CTRL_CLR_INT:
|
||||
if(1 == register_flag)
|
||||
{
|
||||
rt_pin_irq_enable(CH438_INT_PIN, PIN_IRQ_DISABLE);
|
||||
register_flag = 0;
|
||||
}
|
||||
break;
|
||||
case RT_DEVICE_CTRL_SET_INT:
|
||||
if(0 == register_flag)
|
||||
{
|
||||
rt_pin_mode(CH438_INT_PIN, PIN_MODE_INPUT_PULLUP);
|
||||
rt_pin_attach_irq(CH438_INT_PIN, PIN_IRQ_MODE_FALLING, CH438Irq, (void *)serial);
|
||||
rt_pin_irq_enable(CH438_INT_PIN, PIN_IRQ_ENABLE);
|
||||
register_flag = 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return (RT_EOK);
|
||||
}
|
||||
|
||||
static int drv_extuart_putc(struct rt_serial_device *serial, char c)
|
||||
{
|
||||
rt_uint16_t ext_uart_no = serial->config.reserved;
|
||||
rt_uint8_t REG_LSR_ADDR,REG_THR_ADDR;
|
||||
|
||||
REG_LSR_ADDR = offsetadd[ext_uart_no] | REG_LSR0_ADDR;
|
||||
REG_THR_ADDR = offsetadd[ext_uart_no] | REG_THR0_ADDR;
|
||||
|
||||
if (2 == ext_uart_no) {
|
||||
set_485_output(2);
|
||||
CH438_udelay(950);
|
||||
} else if (3 == ext_uart_no) {
|
||||
set_485_output(1);
|
||||
CH438_udelay(950);
|
||||
} else if (7 == ext_uart_no) {
|
||||
set_485_output(3);
|
||||
CH438_udelay(950);
|
||||
}
|
||||
#if defined APPLICATION_SENSOR_WINDSPEED_QS_FS || defined APPLICATION_SENSOR_WINDDIRECTION_QS_FX
|
||||
#else
|
||||
rt_thread_mdelay(2);
|
||||
#endif
|
||||
if((ReadCH438Data( REG_LSR_ADDR ) & BIT_LSR_TEMT) != 0)
|
||||
{
|
||||
WriteCH438Block( REG_THR_ADDR, 1, &c );
|
||||
if (2 == ext_uart_no) {
|
||||
CH438_udelay(950);
|
||||
set_485_input(2);
|
||||
} else if (3 == ext_uart_no) {
|
||||
CH438_udelay(950);
|
||||
set_485_input(1);
|
||||
} else if (7 == ext_uart_no) {
|
||||
CH438_udelay(950);
|
||||
set_485_input(3);
|
||||
}
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static int drv_extuart_getc(struct rt_serial_device *serial)
|
||||
{
|
||||
rt_uint8_t dat = 0;
|
||||
rt_uint8_t REG_LSR_ADDR,REG_RBR_ADDR;
|
||||
rt_uint16_t ext_uart_no = serial->config.reserved;///< get extern uart port
|
||||
|
||||
REG_LSR_ADDR = offsetadd[ext_uart_no] | REG_LSR0_ADDR;
|
||||
REG_RBR_ADDR = offsetadd[ext_uart_no] | REG_RBR0_ADDR;
|
||||
|
||||
rt_thread_mdelay(2);
|
||||
if((ReadCH438Data(REG_LSR_ADDR) & BIT_LSR_DATARDY) == 0x01)
|
||||
{
|
||||
dat = ReadCH438Data( REG_RBR_ADDR );
|
||||
if(dat >= 0) return dat;
|
||||
else return -1;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
const struct rt_uart_ops extuart_ops =
|
||||
{
|
||||
rt_extuart_configure,
|
||||
extuart_control,
|
||||
drv_extuart_putc,
|
||||
drv_extuart_getc,
|
||||
RT_NULL
|
||||
};
|
||||
|
||||
int rt_hw_ch438_init(void)
|
||||
{
|
||||
struct rt_serial_device *extserial;
|
||||
struct device_uart *extuart;
|
||||
struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT;
|
||||
rt_err_t ret;
|
||||
{// extserial0
|
||||
static struct rt_serial_device extserial0;
|
||||
|
||||
extserial = &extserial0;
|
||||
extserial->ops = &extuart_ops;
|
||||
extserial->config = config;
|
||||
extserial->config.baud_rate = 115200;
|
||||
extserial->config.reserved = 0; ///< extern uart port
|
||||
extuart_serial_parm[0] = &extserial0;
|
||||
|
||||
ret = rt_hw_serial_register(extserial,
|
||||
"extuart_dev0",
|
||||
RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX,
|
||||
extuart);
|
||||
if(ret < 0){
|
||||
rt_kprintf("extuart_dev0 register failed.\n");
|
||||
}
|
||||
}
|
||||
{// extserial1
|
||||
static struct rt_serial_device extserial1;
|
||||
|
||||
extserial = &extserial1;
|
||||
extserial->ops = &extuart_ops;
|
||||
extserial->config = config;
|
||||
extserial->config.baud_rate = 115200;
|
||||
extserial->config.reserved = 1; ///< extern uart port
|
||||
extuart_serial_parm[1] = &extserial1;
|
||||
|
||||
ret = rt_hw_serial_register(extserial,
|
||||
"extuart_dev1",
|
||||
RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX,
|
||||
extuart);
|
||||
if(ret < 0){
|
||||
rt_kprintf("extuart_dev1 register failed.\n");
|
||||
}
|
||||
}
|
||||
{// extserial2
|
||||
static struct rt_serial_device extserial2;
|
||||
|
||||
extserial = &extserial2;
|
||||
extserial->ops = &extuart_ops;
|
||||
extserial->config = config;
|
||||
extserial->config.baud_rate = 9600;
|
||||
extserial->config.reserved = 2; ///< extern uart port
|
||||
extuart_serial_parm[2] = &extserial2;
|
||||
|
||||
ret = rt_hw_serial_register(extserial,
|
||||
"extuart_dev2",
|
||||
RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX,
|
||||
extuart);
|
||||
if(ret < 0){
|
||||
rt_kprintf("extuart_dev2 register failed.\n");
|
||||
}
|
||||
}
|
||||
{// extserial3
|
||||
static struct rt_serial_device extserial3;
|
||||
|
||||
extserial = &extserial3;
|
||||
extserial->ops = &extuart_ops;
|
||||
extserial->config = config;
|
||||
extserial->config.baud_rate = 9600;
|
||||
extserial->config.reserved = 3; ///< extern uart port
|
||||
extuart_serial_parm[3] = &extserial3;
|
||||
|
||||
ret = rt_hw_serial_register(extserial,
|
||||
"extuart_dev3",
|
||||
RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX,
|
||||
extuart);
|
||||
if(ret < 0){
|
||||
rt_kprintf("extuart_dev3 register failed.\n");
|
||||
}
|
||||
}
|
||||
{// extserial4
|
||||
static struct rt_serial_device extserial4;
|
||||
|
||||
extserial = &extserial4;
|
||||
extserial->ops = &extuart_ops;
|
||||
extserial->config = config;
|
||||
extserial->config.baud_rate = 115200;
|
||||
extserial->config.reserved = 4; ///< extern uart port
|
||||
extuart_serial_parm[4] = &extserial4;
|
||||
|
||||
ret = rt_hw_serial_register(extserial,
|
||||
"extuart_dev4",
|
||||
RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX,
|
||||
extuart);
|
||||
if(ret < 0){
|
||||
rt_kprintf("extuart_dev4 register failed.\n");
|
||||
}
|
||||
}
|
||||
{// extserial5
|
||||
static struct rt_serial_device extserial5;
|
||||
|
||||
extserial = &extserial5;
|
||||
extserial->ops = &extuart_ops;
|
||||
extserial->config = config;
|
||||
extserial->config.baud_rate = 115200;
|
||||
extserial->config.reserved = 5; ///< extern uart port
|
||||
extuart_serial_parm[5] = &extserial5;
|
||||
|
||||
ret = rt_hw_serial_register(extserial,
|
||||
"extuart_dev5",
|
||||
RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX,
|
||||
extuart);
|
||||
if(ret < 0){
|
||||
rt_kprintf("extuart_dev5 register failed.\n");
|
||||
}
|
||||
}
|
||||
{// extserial6
|
||||
static struct rt_serial_device extserial6;
|
||||
|
||||
extserial = &extserial6;
|
||||
extserial->ops = &extuart_ops;
|
||||
extserial->config = config;
|
||||
extserial->config.baud_rate = 115200;
|
||||
extserial->config.reserved = 6; ///< extern uart port
|
||||
extuart_serial_parm[6] = &extserial6;
|
||||
|
||||
ret = rt_hw_serial_register(extserial,
|
||||
"extuart_dev6",
|
||||
RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX,
|
||||
extuart);
|
||||
if(ret < 0){
|
||||
rt_kprintf("extuart_dev6 register failed.\n");
|
||||
}
|
||||
}
|
||||
{// extserial7
|
||||
static struct rt_serial_device extserial7;
|
||||
|
||||
extserial = &extserial7;
|
||||
extserial->ops = &extuart_ops;
|
||||
extserial->config = config;
|
||||
extserial->config.baud_rate = 9600;
|
||||
extserial->config.reserved = 7; ///< extern uart port
|
||||
extuart_serial_parm[7] = &extserial7;
|
||||
|
||||
ret = rt_hw_serial_register(extserial,
|
||||
"extuart_dev7",
|
||||
RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX,
|
||||
extuart);
|
||||
if(ret < 0){
|
||||
rt_kprintf("extuart_dev7 register failed.\n");
|
||||
}
|
||||
}
|
||||
CH438_INIT();
|
||||
|
||||
return 0;
|
||||
}
|
||||
INIT_DEVICE_EXPORT(rt_hw_ch438_init);
|
||||
|
||||
|
||||
/* Test CH438 register */
|
||||
void CH438_RegTEST(rt_uint8_t num)
|
||||
{
|
||||
rt_uint8_t dat;
|
||||
|
||||
rt_kprintf("current test serilnum: %02x \r\n",offsetadd[num]);
|
||||
rt_kprintf("IER: %02x\r\n",ReadCH438Data(offsetadd[num] | REG_IER0_ADDR));//?IER
|
||||
rt_kprintf("IIR: %02x\r\n",ReadCH438Data(offsetadd[num] | REG_IIR0_ADDR));//?IIR
|
||||
rt_kprintf("LCR: %02x\r\n",ReadCH438Data(offsetadd[num] | REG_LCR0_ADDR));//?LCR
|
||||
rt_kprintf("MCR: %02x\r\n",ReadCH438Data(offsetadd[num] | REG_MCR0_ADDR));//?MCR
|
||||
rt_kprintf("LSR: %02x\r\n",ReadCH438Data(offsetadd[num] | REG_LSR0_ADDR));//?LSR
|
||||
rt_kprintf("MSR: %02x\r\n",ReadCH438Data(offsetadd[num] | REG_MSR0_ADDR));//?MSR
|
||||
rt_kprintf("FCR: %02x\r\n",ReadCH438Data(offsetadd[num] | REG_FCR0_ADDR));//?FCR
|
||||
rt_kprintf("SSR: %02x\r\n",ReadCH438Data(offsetadd[num] | REG_SSR_ADDR ));//?SSR
|
||||
|
||||
rt_kprintf("SCR0: %02x\r\n",(rt_uint8_t)ReadCH438Data(offsetadd[num] | REG_SCR0_ADDR));//?SCR
|
||||
dat = 0x55;
|
||||
WriteCH438Data(offsetadd[num] | REG_SCR0_ADDR, dat);
|
||||
rt_kprintf("SCR55: %02x\r\n",(rt_uint8_t)ReadCH438Data(offsetadd[num] | REG_SCR0_ADDR));//?SCR
|
||||
dat = 0xAA;
|
||||
WriteCH438Data(offsetadd[num] | REG_SCR0_ADDR, dat);
|
||||
rt_kprintf("SCRAA: %02x\r\n",(rt_uint8_t)ReadCH438Data(offsetadd[num] | REG_SCR0_ADDR));//?SCR
|
||||
}
|
||||
|
||||
void CH438_RegsTEST(rt_uint8_t num)
|
||||
{
|
||||
CH438_RegTEST(0);
|
||||
CH438_RegTEST(1);
|
||||
CH438_RegTEST(2);
|
||||
CH438_RegTEST(3);
|
||||
CH438_RegTEST(4);
|
||||
CH438_RegTEST(5);
|
||||
CH438_RegTEST(6);
|
||||
CH438_RegTEST(7);
|
||||
}
|
||||
MSH_CMD_EXPORT(CH438_RegsTEST, CH438_RegsTEST all);
|
||||
|
||||
|
||||
/* Test CH438 extended uart */
|
||||
#define CH438_DEVICE_NAME "ch438"
|
||||
static rt_device_t serial6;
|
||||
|
||||
int CH438_TEST_UART6(void) {
|
||||
rt_uint8_t buff[64]={0};
|
||||
rt_uint8_t str[]="rt device write successfully!123+###\r\n";
|
||||
rt_size_t size,i;
|
||||
rt_err_t res = RT_EOK;
|
||||
|
||||
serial6=rt_device_find("extuart_dev6");
|
||||
if (!serial6) {
|
||||
rt_kprintf("find %s failed!\n", CH438_DEVICE_NAME);
|
||||
return RT_ERROR;
|
||||
}
|
||||
|
||||
res=rt_device_open(serial6, RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX);
|
||||
if (res != RT_EOK) {
|
||||
rt_kprintf("open %s failed!\n", CH438_DEVICE_NAME);
|
||||
return res;
|
||||
}
|
||||
|
||||
/* Test Sending and Receiving Data */
|
||||
while(1) {
|
||||
rt_device_write(serial6, 0 , str, sizeof(str));
|
||||
size=rt_device_read(serial6, 0, buff, (sizeof(buff)));
|
||||
rt_kprintf("receving size = %d\n",size);
|
||||
for(i=0; i<size; ++i) {
|
||||
rt_kprintf("ch=%c\n",buff[i]);
|
||||
}
|
||||
rt_thread_mdelay(1000);
|
||||
rt_memset(buff, 0, 64);
|
||||
}
|
||||
}
|
||||
MSH_CMD_EXPORT(CH438_TEST_UART6,ch438 test sample);
|
||||
|
|
@ -0,0 +1,270 @@
|
|||
#ifndef __CH438_H_
|
||||
#define __CH438_H_
|
||||
|
||||
#include "board.h"
|
||||
#include <stm32f407xx.h>
|
||||
|
||||
#define CH438_BUFFSIZE 255
|
||||
|
||||
/******************************************************************************************/
|
||||
|
||||
/* chip definition */
|
||||
/* CH438serial port0 register address */
|
||||
|
||||
#define REG_RBR0_ADDR 0x00 /* serial port0receive buffer register address */
|
||||
#define REG_THR0_ADDR 0x00 /* serial port0send hold register address */
|
||||
#define REG_IER0_ADDR 0x01 /* serial port0interrupt enable register address */
|
||||
#define REG_IIR0_ADDR 0x02 /* serial port0interrupt identifies register address */
|
||||
#define REG_FCR0_ADDR 0x02 /* serial port0FIFO controls register address */
|
||||
#define REG_LCR0_ADDR 0x03 /* serial port0circuit control register address */
|
||||
#define REG_MCR0_ADDR 0x04 /* serial port0MODEM controls register address */
|
||||
#define REG_LSR0_ADDR 0x05 /* serial port0line status register address */
|
||||
#define REG_MSR0_ADDR 0x06 /* serial port0address of MODEM status register */
|
||||
#define REG_SCR0_ADDR 0x07 /* serial port0the user can define the register address */
|
||||
#define REG_DLL0_ADDR 0x00 /* Baud rate divisor latch low 8-bit byte address */
|
||||
#define REG_DLM0_ADDR 0x01 /* Baud rate divisor latch high 8-bit byte address */
|
||||
|
||||
/* CH438serial port1 register address */
|
||||
|
||||
#define REG_RBR1_ADDR 0x10 /* serial port1receive buffer register address */
|
||||
#define REG_THR1_ADDR 0x10 /* serial port1send hold register address */
|
||||
#define REG_IER1_ADDR 0x11 /* serial port1interrupt enable register address */
|
||||
#define REG_IIR1_ADDR 0x12 /* serial port1interrupt identifies register address */
|
||||
#define REG_FCR1_ADDR 0x12 /* serial port1FIFO controls register address */
|
||||
#define REG_LCR1_ADDR 0x13 /* serial port1circuit control register address */
|
||||
#define REG_MCR1_ADDR 0x14 /* serial port1MODEM controls register address */
|
||||
#define REG_LSR1_ADDR 0x15 /* serial port1line status register address */
|
||||
#define REG_MSR1_ADDR 0x16 /* serial port1address of MODEM status register */
|
||||
#define REG_SCR1_ADDR 0x17 /* serial port1the user can define the register address */
|
||||
#define REG_DLL1_ADDR 0x10 /* Baud rate divisor latch low 8-bit byte address */
|
||||
#define REG_DLM1_ADDR 0x11 /* Baud rate divisor latch high 8-bit byte address */
|
||||
|
||||
|
||||
/* CH438serial port2 register address */
|
||||
|
||||
#define REG_RBR2_ADDR 0x20 /* serial port2receive buffer register address */
|
||||
#define REG_THR2_ADDR 0x20 /* serial port2send hold register address */
|
||||
#define REG_IER2_ADDR 0x21 /* serial port2interrupt enable register address */
|
||||
#define REG_IIR2_ADDR 0x22 /* serial port2interrupt identifies register address */
|
||||
#define REG_FCR2_ADDR 0x22 /* serial port2FIFO controls register address */
|
||||
#define REG_LCR2_ADDR 0x23 /* serial port2circuit control register address */
|
||||
#define REG_MCR2_ADDR 0x24 /* serial port2MODEM controls register address */
|
||||
#define REG_LSR2_ADDR 0x25 /* serial port2line status register address */
|
||||
#define REG_MSR2_ADDR 0x26 /* serial port2address of MODEM status register */
|
||||
#define REG_SCR2_ADDR 0x27 /* serial port2the user can define the register address */
|
||||
#define REG_DLL2_ADDR 0x20 /* Baud rate divisor latch low 8-bit byte address */
|
||||
#define REG_DLM2_ADDR 0x21 /* Baud rate divisor latch high 8-bit byte address */
|
||||
|
||||
|
||||
|
||||
/* CH438serial port3 register address */
|
||||
|
||||
#define REG_RBR3_ADDR 0x30 /* serial port3receive buffer register address */
|
||||
#define REG_THR3_ADDR 0x30 /* serial port3send hold register address */
|
||||
#define REG_IER3_ADDR 0x31 /* serial port3interrupt enable register address */
|
||||
#define REG_IIR3_ADDR 0x32 /* serial port3interrupt identifies register address */
|
||||
#define REG_FCR3_ADDR 0x32 /* serial port3FIFO controls register address */
|
||||
#define REG_LCR3_ADDR 0x33 /* serial port3circuit control register address */
|
||||
#define REG_MCR3_ADDR 0x34 /* serial port3MODEM controls register address */
|
||||
#define REG_LSR3_ADDR 0x35 /* serial port3line status register address */
|
||||
#define REG_MSR3_ADDR 0x36 /* serial port3address of MODEM status register */
|
||||
#define REG_SCR3_ADDR 0x37 /* serial port3the user can define the register address */
|
||||
#define REG_DLL3_ADDR 0x30 /* Baud rate divisor latch low 8-bit byte address */
|
||||
#define REG_DLM3_ADDR 0x31 /* Baud rate divisor latch high 8-bit byte address */
|
||||
|
||||
|
||||
/* CH438serial port4 register address */
|
||||
|
||||
#define REG_RBR4_ADDR 0x08 /* serial port4receive buffer register address */
|
||||
#define REG_THR4_ADDR 0x08 /* serial port4send hold register address */
|
||||
#define REG_IER4_ADDR 0x09 /* serial port4interrupt enable register address */
|
||||
#define REG_IIR4_ADDR 0x0A /* serial port4interrupt identifies register address */
|
||||
#define REG_FCR4_ADDR 0x0A /* serial port4FIFO controls register address */
|
||||
#define REG_LCR4_ADDR 0x0B /* serial port4circuit control register address */
|
||||
#define REG_MCR4_ADDR 0x0C /* serial port4MODEM controls register address */
|
||||
#define REG_LSR4_ADDR 0x0D /* serial port4line status register address */
|
||||
#define REG_MSR4_ADDR 0x0E /* serial port4address of MODEM status register */
|
||||
#define REG_SCR4_ADDR 0x0F /* serial port4the user can define the register address */
|
||||
#define REG_DLL4_ADDR 0x08 /* Baud rate divisor latch low 8-bit byte address */
|
||||
#define REG_DLM4_ADDR 0x09 /* Baud rate divisor latch high 8-bit byte address */
|
||||
|
||||
|
||||
|
||||
/* CH438serial port5 register address */
|
||||
|
||||
#define REG_RBR5_ADDR 0x18 /* serial port5receive buffer register address */
|
||||
#define REG_THR5_ADDR 0x18 /* serial port5send hold register address */
|
||||
#define REG_IER5_ADDR 0x19 /* serial port5interrupt enable register address */
|
||||
#define REG_IIR5_ADDR 0x1A /* serial port5interrupt identifies register address */
|
||||
#define REG_FCR5_ADDR 0x1A /* serial port5FIFO controls register address */
|
||||
#define REG_LCR5_ADDR 0x1B /* serial port5circuit control register address */
|
||||
#define REG_MCR5_ADDR 0x1C /* serial port5MODEM controls register address */
|
||||
#define REG_LSR5_ADDR 0x1D /* serial port5line status register address */
|
||||
#define REG_MSR5_ADDR 0x1E /* serial port5address of MODEM status register */
|
||||
#define REG_SCR5_ADDR 0x1F /* serial port5the user can define the register address */
|
||||
#define REG_DLL5_ADDR 0x18 /* Baud rate divisor latch low 8-bit byte address */
|
||||
#define REG_DLM5_ADDR 0x19 /* Baud rate divisor latch high 8-bit byte address */
|
||||
|
||||
|
||||
/* CH438serial port6 register address */
|
||||
|
||||
#define REG_RBR6_ADDR 0x28 /* serial port6receive buffer register address */
|
||||
#define REG_THR6_ADDR 0x28 /* serial port6send hold register address */
|
||||
#define REG_IER6_ADDR 0x29 /* serial port6interrupt enable register address */
|
||||
#define REG_IIR6_ADDR 0x2A /* serial port6interrupt identifies register address */
|
||||
#define REG_FCR6_ADDR 0x2A /* serial port6FIFO controls register address */
|
||||
#define REG_LCR6_ADDR 0x2B /* serial port6circuit control register address */
|
||||
#define REG_MCR6_ADDR 0x2C /* serial port6MODEM controls register address */
|
||||
#define REG_LSR6_ADDR 0x2D /* serial port6line status register address */
|
||||
#define REG_MSR6_ADDR 0x2E /* serial port6address of MODEM status register */
|
||||
#define REG_SCR6_ADDR 0x2F /* serial port6the user can define the register address */
|
||||
#define REG_DLL6_ADDR 0x28 /* Baud rate divisor latch low 8-bit byte address */
|
||||
#define REG_DLM6_ADDR 0x29 /* Baud rate divisor latch high 8-bit byte address */
|
||||
|
||||
|
||||
/* CH438serial port7 register address */
|
||||
|
||||
#define REG_RBR7_ADDR 0x38 /* serial port7receive buffer register address */
|
||||
#define REG_THR7_ADDR 0x38 /* serial port7send hold register address */
|
||||
#define REG_IER7_ADDR 0x39 /* serial port7interrupt enable register address */
|
||||
#define REG_IIR7_ADDR 0x3A /* serial port7interrupt identifies register address */
|
||||
#define REG_FCR7_ADDR 0x3A /* serial port7FIFO controls register address */
|
||||
#define REG_LCR7_ADDR 0x3B /* serial port7circuit control register address */
|
||||
#define REG_MCR7_ADDR 0x3C /* serial port7MODEM controls register address */
|
||||
#define REG_LSR7_ADDR 0x3D /* serial port7line status register address */
|
||||
#define REG_MSR7_ADDR 0x3E /* serial port7address of MODEM status register */
|
||||
#define REG_SCR7_ADDR 0x3F /* serial port7the user can define the register address */
|
||||
#define REG_DLL7_ADDR 0x38 /* Baud rate divisor latch low 8-bit byte address */
|
||||
#define REG_DLM7_ADDR 0x39 /* Baud rate divisor latch high 8-bit byte address */
|
||||
|
||||
|
||||
#define REG_SSR_ADDR 0x4F /* pecial status register address */
|
||||
|
||||
|
||||
/* IER register bit */
|
||||
|
||||
#define BIT_IER_RESET 0x80 /* The bit is 1 soft reset serial port */
|
||||
#define BIT_IER_LOWPOWER 0x40 /* The bit is 1 close serial port internal reference clock */
|
||||
#define BIT_IER_SLP 0x20 /* serial port0 is SLP, 1 close clock vibrator */
|
||||
#define BIT_IER1_CK2X 0x20 /* serial port1 is CK2X, 1 force the external clock signal after 2 times as internal reference clock */
|
||||
#define BIT_IER_IEMODEM 0x08 /* The bit is 1 allows MODEM input status to interrupt */
|
||||
#define BIT_IER_IELINES 0x04 /* The bit is 1 allow receiving line status to be interrupted */
|
||||
#define BIT_IER_IETHRE 0x02 /* The bit is 1 allows the send hold register to break in mid-air */
|
||||
#define BIT_IER_IERECV 0x01 /* The bit is 1 allows receiving data interrupts */
|
||||
|
||||
/* IIR register bit */
|
||||
|
||||
#define BIT_IIR_FIFOENS1 0x80
|
||||
#define BIT_IIR_FIFOENS0 0x40 /* The two is 1 said use FIFO */
|
||||
|
||||
/* Interrupt type: 0001 has no interrupt, 0110 receiving line status is interrupted, 0100 receiving data can be interrupted,
|
||||
1100 received data timeout interrupt, 0010THR register air interrupt, 0000MODEM input change interrupt */
|
||||
#define BIT_IIR_IID3 0x08
|
||||
#define BIT_IIR_IID2 0x04
|
||||
#define BIT_IIR_IID1 0x02
|
||||
#define BIT_IIR_NOINT 0x01
|
||||
|
||||
/* FCR register bit */
|
||||
|
||||
/* Trigger point: 00 corresponds to 1 byte, 01 corresponds to 16 bytes, 10 corresponds to 64 bytes, 11 corresponds to 112 bytes */
|
||||
#define BIT_FCR_RECVTG1 0x80 /* Set the trigger point for FIFO interruption and automatic hardware flow control */
|
||||
#define BIT_FCR_RECVTG0 0x40 /* Set the trigger point for FIFO interruption and automatic hardware flow control */
|
||||
|
||||
#define BIT_FCR_TFIFORST 0x04 /* The bit is 1 empty the data sent in FIFO */
|
||||
#define BIT_FCR_RFIFORST 0x02 /* The bit is 1 empty the data sent in FIFO */
|
||||
#define BIT_FCR_FIFOEN 0x01 /* The bit is 1 use FIFO, 0 disable FIFO */
|
||||
|
||||
/* LCR register bit */
|
||||
|
||||
#define BIT_LCR_DLAB 0x80 /* To access DLL, DLM, 0 to access RBR/THR/IER */
|
||||
#define BIT_LCR_BREAKEN 0x40 /* 1 forces a BREAK line interval*/
|
||||
|
||||
/* Set the check format: when PAREN is 1, 00 odd check, 01 even check, 10 MARK (set 1), 11 blank (SPACE, clear 0) */
|
||||
#define BIT_LCR_PARMODE1 0x20 /* Sets the parity bit format */
|
||||
#define BIT_LCR_PARMODE0 0x10 /* Sets the parity bit format */
|
||||
|
||||
#define BIT_LCR_PAREN 0x08 /* A value of 1 allows you to generate and receive parity bits when sending */
|
||||
#define BIT_LCR_STOPBIT 0x04 /* If is 1, then two stop bits, is 0, a stop bit */
|
||||
|
||||
/* Set word length: 00 for 5 data bits, 01 for 6 data bits, 10 for 7 data bits and 11 for 8 data bits */
|
||||
#define BIT_LCR_WORDSZ1 0x02 /* Set the word length length */
|
||||
#define BIT_LCR_WORDSZ0 0x01
|
||||
|
||||
/* MCR register bit */
|
||||
|
||||
#define BIT_MCR_AFE 0x20 /* For 1 allows automatic flow control of CTS and RTS hardware */
|
||||
#define BIT_MCR_LOOP 0x10 /* Is the test mode of 1 enabling internal loop */
|
||||
#define BIT_MCR_OUT2 0x08 /* 1 Allows an interrupt request for the serial port output */
|
||||
#define BIT_MCR_OUT1 0x04 /* The MODEM control bit defined for the user */
|
||||
#define BIT_MCR_RTS 0x02 /* The bit is 1 RTS pin output effective */
|
||||
#define BIT_MCR_DTR 0x01 /* The bit is 1 DTR pin output effective */
|
||||
|
||||
/* LSR register bit */
|
||||
|
||||
#define BIT_LSR_RFIFOERR 0x80 /* 1 said There is at least one error in receiving FIFO */
|
||||
#define BIT_LSR_TEMT 0x40 /* 1 said THR and TSR are empty */
|
||||
#define BIT_LSR_THRE 0x20 /* 1 said THR is empty*/
|
||||
#define BIT_LSR_BREAKINT 0x10 /* The bit is 1 said the BREAK line interval was detected*/
|
||||
#define BIT_LSR_FRAMEERR 0x08 /* The bit is 1 said error reading data frame */
|
||||
#define BIT_LSR_PARERR 0x04 /* The bit is 1 said parity error */
|
||||
#define BIT_LSR_OVERR 0x02 /* 1 said receive FIFO buffer overflow */
|
||||
#define BIT_LSR_DATARDY 0x01 /* The bit is 1 said receive data received in FIFO */
|
||||
|
||||
/* MSR register bit */
|
||||
|
||||
#define BIT_MSR_DCD 0x80 /* The bit is 1 said DCD pin effective */
|
||||
#define BIT_MSR_RI 0x40 /* The bit is 1 said RI pin effective */
|
||||
#define BIT_MSR_DSR 0x20 /* The bit is 1 said DSR pin effective */
|
||||
#define BIT_MSR_CTS 0x10 /* The bit is 1 said CTS pin effective */
|
||||
#define BIT_MSR_DDCD 0x08 /* The bit is 1 said DCD pin The input state has changed */
|
||||
#define BIT_MSR_TERI 0x04 /* The bit is 1 said RI pin The input state has changed */
|
||||
#define BIT_MSR_DDSR 0x02 /* The bit is 1 said DSR pin The input state has changed */
|
||||
#define BIT_MSR_DCTS 0x01 /* The bit is 1 said CTS pin The input state has changed */
|
||||
|
||||
/* Interrupt status code */
|
||||
|
||||
#define INT_NOINT 0x01 /* There is no interruption */
|
||||
#define INT_THR_EMPTY 0x02 /* THR empty interruption */
|
||||
#define INT_RCV_OVERTIME 0x0C /* Receive timeout interrupt */
|
||||
#define INT_RCV_SUCCESS 0x04 /* Interrupts are available to receive data */
|
||||
#define INT_RCV_LINES 0x06 /* Receiving line status interrupted */
|
||||
#define INT_MODEM_CHANGE 0x00 /* MODEM input changes interrupt */
|
||||
|
||||
#define CH438_IIR_FIFOS_ENABLED 0xC0 /* use FIFO */
|
||||
|
||||
#define Fpclk 1843200 /* Define the internal clock frequency */
|
||||
|
||||
#define CH438_D0_PIN GET_PIN(E, 2)
|
||||
#define CH438_D1_PIN GET_PIN(E, 3)
|
||||
#define CH438_D2_PIN GET_PIN(E, 4)
|
||||
#define CH438_D3_PIN GET_PIN(E, 5)
|
||||
#define CH438_D4_PIN GET_PIN(E, 6)
|
||||
#define CH438_D5_PIN GET_PIN(F, 6)
|
||||
#define CH438_D6_PIN GET_PIN(F, 7)
|
||||
#define CH438_D7_PIN GET_PIN(F, 8)
|
||||
#define CH438_NWR_PIN GET_PIN(C, 4)
|
||||
#define CH438_NRD_PIN GET_PIN(C, 5)
|
||||
#define CH438_NCS_PIN GET_PIN(B, 1)
|
||||
#define CH438_ALE_PIN GET_PIN(B, 2)
|
||||
#define CH438_INT_PIN GET_PIN(C, 13)
|
||||
#define DIR_485CH1_PIN GET_PIN(F, 10) //485ch1 = ext_uart3
|
||||
#define DIR_485CH2_PIN GET_PIN(F, 9) //485ch2 = ext_uart2
|
||||
#define DIR_485CH3_PIN GET_PIN(D, 7) //485ch3 = ext_uart7
|
||||
|
||||
void CH438_INIT(void);
|
||||
void CH438_PORT_INIT( rt_uint8_t ext_uart_no, rt_uint32_t BaudRate );
|
||||
void set_485_input(rt_uint8_t ch_no);
|
||||
void set_485_output(rt_uint8_t ch_no);
|
||||
rt_uint8_t ReadCH438Data( rt_uint8_t addr );
|
||||
void CH438UARTSend( rt_uint8_t ext_uart_no,rt_uint8_t *Data, rt_uint8_t Num );
|
||||
rt_uint8_t CH438UARTRcv( rt_uint8_t ext_uart_no, rt_uint8_t* buf );
|
||||
|
||||
static void CH438_set_output(void);
|
||||
static void CH438_set_input(void);
|
||||
static void WriteCH438Data( rt_uint8_t addr, char dat);
|
||||
static void WriteCH438Block( rt_uint8_t mAddr, rt_uint8_t mLen, char *mBuf );
|
||||
|
||||
int rt_hw_ch438_init(void);
|
||||
void CH438_RegTEST(rt_uint8_t num);
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
/*###ICF### Section handled by ICF editor, don't touch! ****/
|
||||
/*-Editor annotation file-*/
|
||||
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
|
||||
/*-Specials-*/
|
||||
define symbol __ICFEDIT_intvec_start__ = 0x08000000;
|
||||
/*-Memory Regions-*/
|
||||
define symbol __ICFEDIT_region_ROM_start__ = 0x08000000;
|
||||
define symbol __ICFEDIT_region_ROM_end__ = 0x080FFFFF;
|
||||
define symbol __ICFEDIT_region_RAM1_start__ = 0x20000000;
|
||||
define symbol __ICFEDIT_region_RAM1_end__ = 0x2001FFFF;
|
||||
define symbol __ICFEDIT_region_RAM2_start__ = 0x10000000;
|
||||
define symbol __ICFEDIT_region_RAM2_end__ = 0x1000FFFF;
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x0400;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x000;
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
define memory mem with size = 4G;
|
||||
define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__];
|
||||
define region RAM1_region = mem:[from __ICFEDIT_region_RAM1_start__ to __ICFEDIT_region_RAM1_end__];
|
||||
|
||||
define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
|
||||
|
||||
initialize by copy { readwrite };
|
||||
do not initialize { section .noinit };
|
||||
|
||||
place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
|
||||
|
||||
place in ROM_region { readonly };
|
||||
place in RAM1_region { readwrite, last block CSTACK };
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
; *************************************************************
|
||||
; *** Scatter-Loading Description File generated by uVision ***
|
||||
; *************************************************************
|
||||
|
||||
LR_IROM1 0x08000000 0x00100000 { ; load region size_region
|
||||
ER_IROM1 0x08000000 0x00100000 { ; load address = execution address
|
||||
*.o (RESET, +First)
|
||||
*(InRoot$$Sections)
|
||||
.ANY (+RO)
|
||||
}
|
||||
RW_IRAM1 0x20000000 0x00020000 { ; RW data
|
||||
.ANY (+RW +ZI)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1,13 +1,3 @@
|
|||
config BSP_USING_I2C1
|
||||
bool "Enable I2C1 BUS (software simulation)"
|
||||
default y
|
||||
if BSP_USING_I2C1
|
||||
config BSP_I2C1_SCL_PIN
|
||||
int "I2C scl pin number"
|
||||
range 0 143
|
||||
default 24
|
||||
config BSP_I2C1_SDA_PIN
|
||||
int "I2C sda pin number"
|
||||
range 0 143
|
||||
default 25
|
||||
endif
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
/* RT-Thread Kernel */
|
||||
|
||||
#define RT_NAME_MAX 8
|
||||
#define RT_NAME_MAX 12
|
||||
#define RT_ALIGN_SIZE 4
|
||||
#define RT_THREAD_PRIORITY_32
|
||||
#define RT_THREAD_PRIORITY_MAX 32
|
||||
|
|
@ -116,7 +116,7 @@
|
|||
#define RT_SYSTEM_WORKQUEUE_PRIORITY 23
|
||||
#define RT_USING_SERIAL
|
||||
#define RT_USING_SERIAL_V1
|
||||
#define RT_SERIAL_RB_BUFSZ 64
|
||||
#define RT_SERIAL_RB_BUFSZ 256
|
||||
#define RT_USING_CAN
|
||||
#define RT_USING_I2C
|
||||
#define RT_USING_I2C_BITOPS
|
||||
|
|
@ -147,6 +147,13 @@
|
|||
|
||||
/* Network interface device */
|
||||
|
||||
#define RT_USING_NETDEV
|
||||
#define NETDEV_USING_IFCONFIG
|
||||
#define NETDEV_USING_PING
|
||||
#define NETDEV_USING_NETSTAT
|
||||
#define NETDEV_USING_AUTO_DEFAULT
|
||||
#define NETDEV_IPV4 1
|
||||
#define NETDEV_IPV6 0
|
||||
|
||||
/* light weight TCP/IP stack */
|
||||
|
||||
|
|
@ -173,6 +180,7 @@
|
|||
#define BSP_USING_UART1
|
||||
#define BSP_USING_UART2
|
||||
#define BSP_USING_UART3
|
||||
#define BSP_USING_I2C1
|
||||
#define BSP_USING_USB
|
||||
#define BSP_USING_STM32_USBH
|
||||
#define USB_BUS_NAME "usb"
|
||||
|
|
@ -191,12 +199,7 @@
|
|||
|
||||
#define TRANSFORM_LAYER_ATTRIUBUTE
|
||||
#define ADD_RTTHREAD_FETURES
|
||||
#define SUPPORT_CONNECTION_FRAMEWORK
|
||||
#define CONNECTION_FRAMEWORK_DEBUG
|
||||
#define ADAPTER_HFA21_DRIVER "/dev/uart3"
|
||||
#define CONNECTION_ADAPTER_ETHERNET
|
||||
#define ADAPTER_HFA21_ETHERNET
|
||||
#define ADAPTER_ETHERNET_HFA21 "hfa21_ethernet"
|
||||
#define SUPPORT_SENSOR_FRAMEWORK
|
||||
|
||||
/* Security */
|
||||
|
||||
|
|
@ -223,9 +226,13 @@
|
|||
|
||||
/* sensor app */
|
||||
|
||||
#define APPLICATION_SENSOR
|
||||
|
||||
/* lib */
|
||||
|
||||
#define APP_SELECT_NEWLIB
|
||||
|
||||
/* LVGL configuration */
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -0,0 +1,192 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_optx.xsd">
|
||||
|
||||
<SchemaVersion>1.0</SchemaVersion>
|
||||
|
||||
<Header>### uVision Project, (C) Keil Software</Header>
|
||||
|
||||
<Extensions>
|
||||
<cExt>*.c</cExt>
|
||||
<aExt>*.s*; *.src; *.a*</aExt>
|
||||
<oExt>*.obj; *.o</oExt>
|
||||
<lExt>*.lib</lExt>
|
||||
<tExt>*.txt; *.h; *.inc; *.md</tExt>
|
||||
<pExt>*.plm</pExt>
|
||||
<CppX>*.cpp</CppX>
|
||||
<nMigrate>0</nMigrate>
|
||||
</Extensions>
|
||||
|
||||
<DaveTm>
|
||||
<dwLowDateTime>0</dwLowDateTime>
|
||||
<dwHighDateTime>0</dwHighDateTime>
|
||||
</DaveTm>
|
||||
|
||||
<Target>
|
||||
<TargetName>rt-thread</TargetName>
|
||||
<ToolsetNumber>0x4</ToolsetNumber>
|
||||
<ToolsetName>ARM-ADS</ToolsetName>
|
||||
<TargetOption>
|
||||
<CLKADS>168000000</CLKADS>
|
||||
<OPTTT>
|
||||
<gFlags>1</gFlags>
|
||||
<BeepAtEnd>1</BeepAtEnd>
|
||||
<RunSim>0</RunSim>
|
||||
<RunTarget>1</RunTarget>
|
||||
<RunAbUc>0</RunAbUc>
|
||||
</OPTTT>
|
||||
<OPTHX>
|
||||
<HexSelection>1</HexSelection>
|
||||
<FlashByte>65535</FlashByte>
|
||||
<HexRangeLowAddress>0</HexRangeLowAddress>
|
||||
<HexRangeHighAddress>0</HexRangeHighAddress>
|
||||
<HexOffset>0</HexOffset>
|
||||
</OPTHX>
|
||||
<OPTLEX>
|
||||
<PageWidth>79</PageWidth>
|
||||
<PageLength>66</PageLength>
|
||||
<TabStop>8</TabStop>
|
||||
<ListingPath>.\build\keil\List\</ListingPath>
|
||||
</OPTLEX>
|
||||
<ListingPage>
|
||||
<CreateCListing>1</CreateCListing>
|
||||
<CreateAListing>1</CreateAListing>
|
||||
<CreateLListing>1</CreateLListing>
|
||||
<CreateIListing>0</CreateIListing>
|
||||
<AsmCond>1</AsmCond>
|
||||
<AsmSymb>1</AsmSymb>
|
||||
<AsmXref>0</AsmXref>
|
||||
<CCond>1</CCond>
|
||||
<CCode>0</CCode>
|
||||
<CListInc>0</CListInc>
|
||||
<CSymb>0</CSymb>
|
||||
<LinkerCodeListing>0</LinkerCodeListing>
|
||||
</ListingPage>
|
||||
<OPTXL>
|
||||
<LMap>1</LMap>
|
||||
<LComments>1</LComments>
|
||||
<LGenerateSymbols>1</LGenerateSymbols>
|
||||
<LLibSym>1</LLibSym>
|
||||
<LLines>1</LLines>
|
||||
<LLocSym>1</LLocSym>
|
||||
<LPubSym>1</LPubSym>
|
||||
<LXref>0</LXref>
|
||||
<LExpSel>0</LExpSel>
|
||||
</OPTXL>
|
||||
<OPTFL>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<IsCurrentTarget>1</IsCurrentTarget>
|
||||
</OPTFL>
|
||||
<CpuCode>18</CpuCode>
|
||||
<DebugOpt>
|
||||
<uSim>0</uSim>
|
||||
<uTrg>1</uTrg>
|
||||
<sLdApp>1</sLdApp>
|
||||
<sGomain>1</sGomain>
|
||||
<sRbreak>1</sRbreak>
|
||||
<sRwatch>1</sRwatch>
|
||||
<sRmem>1</sRmem>
|
||||
<sRfunc>1</sRfunc>
|
||||
<sRbox>1</sRbox>
|
||||
<tLdApp>1</tLdApp>
|
||||
<tGomain>1</tGomain>
|
||||
<tRbreak>1</tRbreak>
|
||||
<tRwatch>1</tRwatch>
|
||||
<tRmem>1</tRmem>
|
||||
<tRfunc>0</tRfunc>
|
||||
<tRbox>1</tRbox>
|
||||
<tRtrace>1</tRtrace>
|
||||
<sRSysVw>1</sRSysVw>
|
||||
<tRSysVw>1</tRSysVw>
|
||||
<sRunDeb>0</sRunDeb>
|
||||
<sLrtime>0</sLrtime>
|
||||
<bEvRecOn>1</bEvRecOn>
|
||||
<bSchkAxf>0</bSchkAxf>
|
||||
<bTchkAxf>0</bTchkAxf>
|
||||
<nTsel>4</nTsel>
|
||||
<sDll></sDll>
|
||||
<sDllPa></sDllPa>
|
||||
<sDlgDll></sDlgDll>
|
||||
<sDlgPa></sDlgPa>
|
||||
<sIfile></sIfile>
|
||||
<tDll></tDll>
|
||||
<tDllPa></tDllPa>
|
||||
<tDlgDll></tDlgDll>
|
||||
<tDlgPa></tDlgPa>
|
||||
<tIfile></tIfile>
|
||||
<pMon>Segger\JL2CM3.dll</pMon>
|
||||
</DebugOpt>
|
||||
<TargetDriverDllRegistry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>JL2CM3</Key>
|
||||
<Name>-U30000299 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8001 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F407ZGTx$CMSIS\Flash\STM32F4xx_1024.FLM)</Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>UL2CM3</Key>
|
||||
<Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32F407ZGTx$CMSIS\Flash\STM32F4xx_1024.FLM))</Name>
|
||||
</SetRegEntry>
|
||||
</TargetDriverDllRegistry>
|
||||
<Breakpoint/>
|
||||
<Tracepoint>
|
||||
<THDelay>0</THDelay>
|
||||
</Tracepoint>
|
||||
<DebugFlag>
|
||||
<trace>0</trace>
|
||||
<periodic>0</periodic>
|
||||
<aLwin>0</aLwin>
|
||||
<aCover>0</aCover>
|
||||
<aSer1>0</aSer1>
|
||||
<aSer2>0</aSer2>
|
||||
<aPa>0</aPa>
|
||||
<viewmode>0</viewmode>
|
||||
<vrSel>0</vrSel>
|
||||
<aSym>0</aSym>
|
||||
<aTbox>0</aTbox>
|
||||
<AscS1>0</AscS1>
|
||||
<AscS2>0</AscS2>
|
||||
<AscS3>0</AscS3>
|
||||
<aSer3>0</aSer3>
|
||||
<eProf>0</eProf>
|
||||
<aLa>0</aLa>
|
||||
<aPa1>0</aPa1>
|
||||
<AscS4>0</AscS4>
|
||||
<aSer4>0</aSer4>
|
||||
<StkLoc>0</StkLoc>
|
||||
<TrcWin>0</TrcWin>
|
||||
<newCpu>0</newCpu>
|
||||
<uProt>0</uProt>
|
||||
</DebugFlag>
|
||||
<LintExecutable></LintExecutable>
|
||||
<LintConfigFile></LintConfigFile>
|
||||
<bLintAuto>0</bLintAuto>
|
||||
<bAutoGenD>0</bAutoGenD>
|
||||
<LntExFlags>0</LntExFlags>
|
||||
<pMisraName></pMisraName>
|
||||
<pszMrule></pszMrule>
|
||||
<pSingCmds></pSingCmds>
|
||||
<pMultCmds></pMultCmds>
|
||||
<pMisraNamep></pMisraNamep>
|
||||
<pszMrulep></pszMrulep>
|
||||
<pSingCmdsp></pSingCmdsp>
|
||||
<pMultCmdsp></pMultCmdsp>
|
||||
<DebugDescription>
|
||||
<Enable>1</Enable>
|
||||
<EnableFlashSeq>0</EnableFlashSeq>
|
||||
<EnableLog>0</EnableLog>
|
||||
<Protocol>2</Protocol>
|
||||
<DbgClock>10000000</DbgClock>
|
||||
</DebugDescription>
|
||||
</TargetOption>
|
||||
</Target>
|
||||
|
||||
<Group>
|
||||
<GroupName>Source Group 1</GroupName>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
</Group>
|
||||
|
||||
</ProjectOpt>
|
||||
|
|
@ -0,0 +1,396 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_projx.xsd">
|
||||
|
||||
<SchemaVersion>2.1</SchemaVersion>
|
||||
|
||||
<Header>### uVision Project, (C) Keil Software</Header>
|
||||
|
||||
<Targets>
|
||||
<Target>
|
||||
<TargetName>rt-thread</TargetName>
|
||||
<ToolsetNumber>0x4</ToolsetNumber>
|
||||
<ToolsetName>ARM-ADS</ToolsetName>
|
||||
<pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
|
||||
<uAC6>0</uAC6>
|
||||
<TargetOption>
|
||||
<TargetCommonOption>
|
||||
<Device>STM32F407ZGTx</Device>
|
||||
<Vendor>STMicroelectronics</Vendor>
|
||||
<PackID>Keil.STM32F4xx_DFP.2.16.0</PackID>
|
||||
<PackURL>http://www.keil.com/pack/</PackURL>
|
||||
<Cpu>IRAM(0x20000000,0x20000) IRAM2(0x10000000,0x10000) IROM(0x08000000,0x100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
|
||||
<FlashUtilSpec></FlashUtilSpec>
|
||||
<StartupFile></StartupFile>
|
||||
<FlashDriverDll>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32F407ZGTx$CMSIS\Flash\STM32F4xx_1024.FLM))</FlashDriverDll>
|
||||
<DeviceId>0</DeviceId>
|
||||
<RegisterFile>$$Device:STM32F407ZGTx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h</RegisterFile>
|
||||
<MemoryEnv></MemoryEnv>
|
||||
<Cmp></Cmp>
|
||||
<Asm></Asm>
|
||||
<Linker></Linker>
|
||||
<OHString></OHString>
|
||||
<InfinionOptionDll></InfinionOptionDll>
|
||||
<SLE66CMisc></SLE66CMisc>
|
||||
<SLE66AMisc></SLE66AMisc>
|
||||
<SLE66LinkerMisc></SLE66LinkerMisc>
|
||||
<SFDFile>$$Device:STM32F407ZGTx$CMSIS\SVD\STM32F40x.svd</SFDFile>
|
||||
<bCustSvd>0</bCustSvd>
|
||||
<UseEnv>0</UseEnv>
|
||||
<BinPath></BinPath>
|
||||
<IncludePath></IncludePath>
|
||||
<LibPath></LibPath>
|
||||
<RegisterFilePath></RegisterFilePath>
|
||||
<DBRegisterFilePath></DBRegisterFilePath>
|
||||
<TargetStatus>
|
||||
<Error>0</Error>
|
||||
<ExitCodeStop>0</ExitCodeStop>
|
||||
<ButtonStop>0</ButtonStop>
|
||||
<NotGenerated>0</NotGenerated>
|
||||
<InvalidFlash>1</InvalidFlash>
|
||||
</TargetStatus>
|
||||
<OutputDirectory>.\build\keil\Obj\</OutputDirectory>
|
||||
<OutputName>rt-thread</OutputName>
|
||||
<CreateExecutable>1</CreateExecutable>
|
||||
<CreateLib>0</CreateLib>
|
||||
<CreateHexFile>0</CreateHexFile>
|
||||
<DebugInformation>1</DebugInformation>
|
||||
<BrowseInformation>0</BrowseInformation>
|
||||
<ListingPath>.\build\keil\List\</ListingPath>
|
||||
<HexFormatSelection>1</HexFormatSelection>
|
||||
<Merge32K>0</Merge32K>
|
||||
<CreateBatchFile>0</CreateBatchFile>
|
||||
<BeforeCompile>
|
||||
<RunUserProg1>0</RunUserProg1>
|
||||
<RunUserProg2>0</RunUserProg2>
|
||||
<UserProg1Name></UserProg1Name>
|
||||
<UserProg2Name></UserProg2Name>
|
||||
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
|
||||
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
|
||||
<nStopU1X>0</nStopU1X>
|
||||
<nStopU2X>0</nStopU2X>
|
||||
</BeforeCompile>
|
||||
<BeforeMake>
|
||||
<RunUserProg1>0</RunUserProg1>
|
||||
<RunUserProg2>0</RunUserProg2>
|
||||
<UserProg1Name></UserProg1Name>
|
||||
<UserProg2Name></UserProg2Name>
|
||||
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
|
||||
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
|
||||
<nStopB1X>0</nStopB1X>
|
||||
<nStopB2X>0</nStopB2X>
|
||||
</BeforeMake>
|
||||
<AfterMake>
|
||||
<RunUserProg1>1</RunUserProg1>
|
||||
<RunUserProg2>0</RunUserProg2>
|
||||
<UserProg1Name>fromelf --bin !L --output rtthread.bin</UserProg1Name>
|
||||
<UserProg2Name></UserProg2Name>
|
||||
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
|
||||
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
|
||||
<nStopA1X>0</nStopA1X>
|
||||
<nStopA2X>0</nStopA2X>
|
||||
</AfterMake>
|
||||
<SelectedForBatchBuild>0</SelectedForBatchBuild>
|
||||
<SVCSIdString></SVCSIdString>
|
||||
</TargetCommonOption>
|
||||
<CommonProperty>
|
||||
<UseCPPCompiler>0</UseCPPCompiler>
|
||||
<RVCTCodeConst>0</RVCTCodeConst>
|
||||
<RVCTZI>0</RVCTZI>
|
||||
<RVCTOtherData>0</RVCTOtherData>
|
||||
<ModuleSelection>0</ModuleSelection>
|
||||
<IncludeInBuild>1</IncludeInBuild>
|
||||
<AlwaysBuild>0</AlwaysBuild>
|
||||
<GenerateAssemblyFile>0</GenerateAssemblyFile>
|
||||
<AssembleAssemblyFile>0</AssembleAssemblyFile>
|
||||
<PublicsOnly>0</PublicsOnly>
|
||||
<StopOnExitCode>3</StopOnExitCode>
|
||||
<CustomArgument></CustomArgument>
|
||||
<IncludeLibraryModules></IncludeLibraryModules>
|
||||
<ComprImg>1</ComprImg>
|
||||
</CommonProperty>
|
||||
<DllOption>
|
||||
<SimDllName>SARMCM3.DLL</SimDllName>
|
||||
<SimDllArguments> -REMAP -MPU</SimDllArguments>
|
||||
<SimDlgDll>DCM.DLL</SimDlgDll>
|
||||
<SimDlgDllArguments>-pCM4</SimDlgDllArguments>
|
||||
<TargetDllName>SARMCM3.DLL</TargetDllName>
|
||||
<TargetDllArguments> -MPU</TargetDllArguments>
|
||||
<TargetDlgDll>TCM.DLL</TargetDlgDll>
|
||||
<TargetDlgDllArguments>-pCM4</TargetDlgDllArguments>
|
||||
</DllOption>
|
||||
<DebugOption>
|
||||
<OPTHX>
|
||||
<HexSelection>1</HexSelection>
|
||||
<HexRangeLowAddress>0</HexRangeLowAddress>
|
||||
<HexRangeHighAddress>0</HexRangeHighAddress>
|
||||
<HexOffset>0</HexOffset>
|
||||
<Oh166RecLen>16</Oh166RecLen>
|
||||
</OPTHX>
|
||||
</DebugOption>
|
||||
<Utilities>
|
||||
<Flash1>
|
||||
<UseTargetDll>1</UseTargetDll>
|
||||
<UseExternalTool>0</UseExternalTool>
|
||||
<RunIndependent>0</RunIndependent>
|
||||
<UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging>
|
||||
<Capability>1</Capability>
|
||||
<DriverSelection>4096</DriverSelection>
|
||||
</Flash1>
|
||||
<bUseTDR>1</bUseTDR>
|
||||
<Flash2>BIN\UL2CM3.DLL</Flash2>
|
||||
<Flash3>"" ()</Flash3>
|
||||
<Flash4></Flash4>
|
||||
<pFcarmOut></pFcarmOut>
|
||||
<pFcarmGrp></pFcarmGrp>
|
||||
<pFcArmRoot></pFcArmRoot>
|
||||
<FcArmLst>0</FcArmLst>
|
||||
</Utilities>
|
||||
<TargetArmAds>
|
||||
<ArmAdsMisc>
|
||||
<GenerateListings>0</GenerateListings>
|
||||
<asHll>1</asHll>
|
||||
<asAsm>1</asAsm>
|
||||
<asMacX>1</asMacX>
|
||||
<asSyms>1</asSyms>
|
||||
<asFals>1</asFals>
|
||||
<asDbgD>1</asDbgD>
|
||||
<asForm>1</asForm>
|
||||
<ldLst>0</ldLst>
|
||||
<ldmm>1</ldmm>
|
||||
<ldXref>1</ldXref>
|
||||
<BigEnd>0</BigEnd>
|
||||
<AdsALst>1</AdsALst>
|
||||
<AdsACrf>1</AdsACrf>
|
||||
<AdsANop>0</AdsANop>
|
||||
<AdsANot>0</AdsANot>
|
||||
<AdsLLst>1</AdsLLst>
|
||||
<AdsLmap>1</AdsLmap>
|
||||
<AdsLcgr>1</AdsLcgr>
|
||||
<AdsLsym>1</AdsLsym>
|
||||
<AdsLszi>1</AdsLszi>
|
||||
<AdsLtoi>1</AdsLtoi>
|
||||
<AdsLsun>1</AdsLsun>
|
||||
<AdsLven>1</AdsLven>
|
||||
<AdsLsxf>1</AdsLsxf>
|
||||
<RvctClst>0</RvctClst>
|
||||
<GenPPlst>0</GenPPlst>
|
||||
<AdsCpuType>"Cortex-M4"</AdsCpuType>
|
||||
<RvctDeviceName></RvctDeviceName>
|
||||
<mOS>0</mOS>
|
||||
<uocRom>0</uocRom>
|
||||
<uocRam>0</uocRam>
|
||||
<hadIROM>1</hadIROM>
|
||||
<hadIRAM>1</hadIRAM>
|
||||
<hadXRAM>0</hadXRAM>
|
||||
<uocXRam>0</uocXRam>
|
||||
<RvdsVP>2</RvdsVP>
|
||||
<RvdsMve>0</RvdsMve>
|
||||
<RvdsCdeCp>0</RvdsCdeCp>
|
||||
<hadIRAM2>1</hadIRAM2>
|
||||
<hadIROM2>0</hadIROM2>
|
||||
<StupSel>8</StupSel>
|
||||
<useUlib>0</useUlib>
|
||||
<EndSel>0</EndSel>
|
||||
<uLtcg>0</uLtcg>
|
||||
<nSecure>0</nSecure>
|
||||
<RoSelD>3</RoSelD>
|
||||
<RwSelD>4</RwSelD>
|
||||
<CodeSel>0</CodeSel>
|
||||
<OptFeed>0</OptFeed>
|
||||
<NoZi1>0</NoZi1>
|
||||
<NoZi2>0</NoZi2>
|
||||
<NoZi3>0</NoZi3>
|
||||
<NoZi4>0</NoZi4>
|
||||
<NoZi5>0</NoZi5>
|
||||
<Ro1Chk>0</Ro1Chk>
|
||||
<Ro2Chk>0</Ro2Chk>
|
||||
<Ro3Chk>0</Ro3Chk>
|
||||
<Ir1Chk>1</Ir1Chk>
|
||||
<Ir2Chk>0</Ir2Chk>
|
||||
<Ra1Chk>0</Ra1Chk>
|
||||
<Ra2Chk>0</Ra2Chk>
|
||||
<Ra3Chk>0</Ra3Chk>
|
||||
<Im1Chk>0</Im1Chk>
|
||||
<Im2Chk>1</Im2Chk>
|
||||
<OnChipMemories>
|
||||
<Ocm1>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</Ocm1>
|
||||
<Ocm2>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</Ocm2>
|
||||
<Ocm3>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</Ocm3>
|
||||
<Ocm4>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</Ocm4>
|
||||
<Ocm5>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</Ocm5>
|
||||
<Ocm6>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</Ocm6>
|
||||
<IRAM>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x20000000</StartAddress>
|
||||
<Size>0x20000</Size>
|
||||
</IRAM>
|
||||
<IROM>
|
||||
<Type>1</Type>
|
||||
<StartAddress>0x8000000</StartAddress>
|
||||
<Size>0x100000</Size>
|
||||
</IROM>
|
||||
<XRAM>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</XRAM>
|
||||
<OCR_RVCT1>
|
||||
<Type>1</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</OCR_RVCT1>
|
||||
<OCR_RVCT2>
|
||||
<Type>1</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</OCR_RVCT2>
|
||||
<OCR_RVCT3>
|
||||
<Type>1</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</OCR_RVCT3>
|
||||
<OCR_RVCT4>
|
||||
<Type>1</Type>
|
||||
<StartAddress>0x8000000</StartAddress>
|
||||
<Size>0x100000</Size>
|
||||
</OCR_RVCT4>
|
||||
<OCR_RVCT5>
|
||||
<Type>1</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</OCR_RVCT5>
|
||||
<OCR_RVCT6>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</OCR_RVCT6>
|
||||
<OCR_RVCT7>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</OCR_RVCT7>
|
||||
<OCR_RVCT8>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</OCR_RVCT8>
|
||||
<OCR_RVCT9>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x20000000</StartAddress>
|
||||
<Size>0x20000</Size>
|
||||
</OCR_RVCT9>
|
||||
<OCR_RVCT10>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x10000000</StartAddress>
|
||||
<Size>0x10000</Size>
|
||||
</OCR_RVCT10>
|
||||
</OnChipMemories>
|
||||
<RvctStartVector></RvctStartVector>
|
||||
</ArmAdsMisc>
|
||||
<Cads>
|
||||
<interw>1</interw>
|
||||
<Optim>1</Optim>
|
||||
<oTime>0</oTime>
|
||||
<SplitLS>0</SplitLS>
|
||||
<OneElfS>1</OneElfS>
|
||||
<Strict>0</Strict>
|
||||
<EnumInt>0</EnumInt>
|
||||
<PlainCh>0</PlainCh>
|
||||
<Ropi>0</Ropi>
|
||||
<Rwpi>0</Rwpi>
|
||||
<wLevel>2</wLevel>
|
||||
<uThumb>0</uThumb>
|
||||
<uSurpInc>0</uSurpInc>
|
||||
<uC99>1</uC99>
|
||||
<uGnu>0</uGnu>
|
||||
<useXO>0</useXO>
|
||||
<v6Lang>1</v6Lang>
|
||||
<v6LangP>1</v6LangP>
|
||||
<vShortEn>1</vShortEn>
|
||||
<vShortWch>1</vShortWch>
|
||||
<v6Lto>0</v6Lto>
|
||||
<v6WtE>0</v6WtE>
|
||||
<v6Rtti>0</v6Rtti>
|
||||
<VariousControls>
|
||||
<MiscControls></MiscControls>
|
||||
<Define></Define>
|
||||
<Undefine></Undefine>
|
||||
<IncludePath></IncludePath>
|
||||
</VariousControls>
|
||||
</Cads>
|
||||
<Aads>
|
||||
<interw>1</interw>
|
||||
<Ropi>0</Ropi>
|
||||
<Rwpi>0</Rwpi>
|
||||
<thumb>0</thumb>
|
||||
<SplitLS>0</SplitLS>
|
||||
<SwStkChk>0</SwStkChk>
|
||||
<NoWarn>0</NoWarn>
|
||||
<uSurpInc>0</uSurpInc>
|
||||
<useXO>0</useXO>
|
||||
<ClangAsOpt>4</ClangAsOpt>
|
||||
<VariousControls>
|
||||
<MiscControls></MiscControls>
|
||||
<Define></Define>
|
||||
<Undefine></Undefine>
|
||||
<IncludePath></IncludePath>
|
||||
</VariousControls>
|
||||
</Aads>
|
||||
<LDads>
|
||||
<umfTarg>0</umfTarg>
|
||||
<Ropi>0</Ropi>
|
||||
<Rwpi>0</Rwpi>
|
||||
<noStLib>0</noStLib>
|
||||
<RepFail>1</RepFail>
|
||||
<useFile>0</useFile>
|
||||
<TextAddressRange>0x08000000</TextAddressRange>
|
||||
<DataAddressRange>0x20000000</DataAddressRange>
|
||||
<pXoBase></pXoBase>
|
||||
<ScatterFile>.\board\linker_scripts\link.sct</ScatterFile>
|
||||
<IncludeLibs></IncludeLibs>
|
||||
<IncludeLibsPath></IncludeLibsPath>
|
||||
<Misc></Misc>
|
||||
<LinkerInputFile></LinkerInputFile>
|
||||
<DisabledWarnings></DisabledWarnings>
|
||||
</LDads>
|
||||
</TargetArmAds>
|
||||
</TargetOption>
|
||||
<Groups>
|
||||
<Group>
|
||||
<GroupName>Source Group 1</GroupName>
|
||||
</Group>
|
||||
</Groups>
|
||||
</Target>
|
||||
</Targets>
|
||||
|
||||
<RTE>
|
||||
<apis/>
|
||||
<components/>
|
||||
<files/>
|
||||
</RTE>
|
||||
|
||||
</Project>
|
||||
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
|
@ -0,0 +1,495 @@
|
|||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# XIUOS Rt-thread Configuration
|
||||
#
|
||||
CONFIG_ROOT_DIR="../../../.."
|
||||
CONFIG_BSP_DIR="."
|
||||
CONFIG_RT_Thread_DIR="../.."
|
||||
CONFIG_RTT_DIR="../../rt-thread"
|
||||
CONFIG_BOARD_K210_EVB=y
|
||||
|
||||
#
|
||||
# RT-Thread Kernel
|
||||
#
|
||||
CONFIG_RT_NAME_MAX=8
|
||||
# CONFIG_RT_USING_BIG_ENDIAN is not set
|
||||
# CONFIG_RT_USING_ARCH_DATA_TYPE is not set
|
||||
CONFIG_RT_USING_SMP=y
|
||||
CONFIG_RT_CPUS_NR=2
|
||||
CONFIG_RT_ALIGN_SIZE=8
|
||||
# CONFIG_RT_THREAD_PRIORITY_8 is not set
|
||||
CONFIG_RT_THREAD_PRIORITY_32=y
|
||||
# CONFIG_RT_THREAD_PRIORITY_256 is not set
|
||||
CONFIG_RT_THREAD_PRIORITY_MAX=32
|
||||
CONFIG_RT_TICK_PER_SECOND=1000
|
||||
CONFIG_RT_USING_OVERFLOW_CHECK=y
|
||||
CONFIG_RT_USING_HOOK=y
|
||||
CONFIG_RT_USING_IDLE_HOOK=y
|
||||
CONFIG_RT_IDLE_HOOK_LIST_SIZE=4
|
||||
CONFIG_IDLE_THREAD_STACK_SIZE=4096
|
||||
CONFIG_SYSTEM_THREAD_STACK_SIZE=4096
|
||||
CONFIG_RT_USING_TIMER_SOFT=y
|
||||
CONFIG_RT_TIMER_THREAD_PRIO=4
|
||||
CONFIG_RT_TIMER_THREAD_STACK_SIZE=2048
|
||||
|
||||
#
|
||||
# kservice optimization
|
||||
#
|
||||
# CONFIG_RT_KSERVICE_USING_STDLIB is not set
|
||||
# CONFIG_RT_KSERVICE_USING_TINY_SIZE is not set
|
||||
# CONFIG_RT_USING_ASM_MEMCPY is not set
|
||||
CONFIG_RT_DEBUG=y
|
||||
CONFIG_RT_DEBUG_COLOR=y
|
||||
CONFIG_RT_DEBUG_INIT_CONFIG=y
|
||||
CONFIG_RT_DEBUG_INIT=1
|
||||
# CONFIG_RT_DEBUG_THREAD_CONFIG is not set
|
||||
# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set
|
||||
# CONFIG_RT_DEBUG_IPC_CONFIG is not set
|
||||
# CONFIG_RT_DEBUG_TIMER_CONFIG is not set
|
||||
# CONFIG_RT_DEBUG_IRQ_CONFIG is not set
|
||||
# CONFIG_RT_DEBUG_MEM_CONFIG is not set
|
||||
# CONFIG_RT_DEBUG_SLAB_CONFIG is not set
|
||||
# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set
|
||||
# CONFIG_RT_DEBUG_MODULE_CONFIG is not set
|
||||
|
||||
#
|
||||
# Inter-Thread communication
|
||||
#
|
||||
CONFIG_RT_USING_SEMAPHORE=y
|
||||
CONFIG_RT_USING_MUTEX=y
|
||||
CONFIG_RT_USING_EVENT=y
|
||||
CONFIG_RT_USING_MAILBOX=y
|
||||
CONFIG_RT_USING_MESSAGEQUEUE=y
|
||||
CONFIG_RT_USING_SIGNALS=y
|
||||
|
||||
#
|
||||
# Memory Management
|
||||
#
|
||||
CONFIG_RT_USING_MEMPOOL=y
|
||||
CONFIG_RT_USING_MEMHEAP=y
|
||||
# CONFIG_RT_USING_NOHEAP is not set
|
||||
# CONFIG_RT_USING_SMALL_MEM is not set
|
||||
CONFIG_RT_USING_SLAB=y
|
||||
# CONFIG_RT_USING_MEMHEAP_AS_HEAP is not set
|
||||
# CONFIG_RT_USING_USERHEAP is not set
|
||||
# CONFIG_RT_USING_MEMTRACE is not set
|
||||
CONFIG_RT_USING_HEAP=y
|
||||
|
||||
#
|
||||
# Kernel Device Object
|
||||
#
|
||||
CONFIG_RT_USING_DEVICE=y
|
||||
# CONFIG_RT_USING_DEVICE_OPS is not set
|
||||
# CONFIG_RT_USING_INTERRUPT_INFO is not set
|
||||
CONFIG_RT_USING_CONSOLE=y
|
||||
CONFIG_RT_CONSOLEBUF_SIZE=128
|
||||
CONFIG_RT_CONSOLE_DEVICE_NAME="uarths"
|
||||
# CONFIG_RT_PRINTF_LONGLONG is not set
|
||||
CONFIG_RT_VER_NUM=0x40004
|
||||
CONFIG_ARCH_CPU_64BIT=y
|
||||
# CONFIG_RT_USING_CPU_FFS is not set
|
||||
CONFIG_ARCH_RISCV=y
|
||||
CONFIG_ARCH_RISCV_FPU=y
|
||||
CONFIG_ARCH_RISCV_FPU_S=y
|
||||
CONFIG_ARCH_RISCV64=y
|
||||
# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set
|
||||
|
||||
#
|
||||
# RT-Thread Components
|
||||
#
|
||||
CONFIG_RT_USING_COMPONENTS_INIT=y
|
||||
CONFIG_RT_USING_USER_MAIN=y
|
||||
CONFIG_RT_MAIN_THREAD_STACK_SIZE=10240
|
||||
CONFIG_RT_MAIN_THREAD_PRIORITY=10
|
||||
|
||||
#
|
||||
# C++ features
|
||||
#
|
||||
CONFIG_RT_USING_CPLUSPLUS=y
|
||||
# CONFIG_RT_USING_CPLUSPLUS11 is not set
|
||||
|
||||
#
|
||||
# Command shell
|
||||
#
|
||||
CONFIG_RT_USING_FINSH=y
|
||||
CONFIG_RT_USING_MSH=y
|
||||
CONFIG_FINSH_USING_MSH=y
|
||||
CONFIG_FINSH_THREAD_NAME="tshell"
|
||||
CONFIG_FINSH_THREAD_PRIORITY=20
|
||||
CONFIG_FINSH_THREAD_STACK_SIZE=20480
|
||||
CONFIG_FINSH_USING_HISTORY=y
|
||||
CONFIG_FINSH_HISTORY_LINES=5
|
||||
CONFIG_FINSH_USING_SYMTAB=y
|
||||
CONFIG_FINSH_CMD_SIZE=80
|
||||
CONFIG_MSH_USING_BUILT_IN_COMMANDS=y
|
||||
CONFIG_FINSH_USING_DESCRIPTION=y
|
||||
# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set
|
||||
# CONFIG_FINSH_USING_AUTH is not set
|
||||
CONFIG_FINSH_ARG_MAX=10
|
||||
|
||||
#
|
||||
# Device virtual file system
|
||||
#
|
||||
CONFIG_RT_USING_DFS=y
|
||||
CONFIG_DFS_USING_WORKDIR=y
|
||||
CONFIG_DFS_FILESYSTEMS_MAX=16
|
||||
CONFIG_DFS_FILESYSTEM_TYPES_MAX=16
|
||||
CONFIG_DFS_FD_MAX=64
|
||||
# CONFIG_RT_USING_DFS_MNTTABLE is not set
|
||||
CONFIG_RT_USING_DFS_ELMFAT=y
|
||||
|
||||
#
|
||||
# elm-chan's FatFs, Generic FAT Filesystem Module
|
||||
#
|
||||
CONFIG_RT_DFS_ELM_CODE_PAGE=437
|
||||
CONFIG_RT_DFS_ELM_WORD_ACCESS=y
|
||||
# CONFIG_RT_DFS_ELM_USE_LFN_0 is not set
|
||||
# CONFIG_RT_DFS_ELM_USE_LFN_1 is not set
|
||||
# CONFIG_RT_DFS_ELM_USE_LFN_2 is not set
|
||||
CONFIG_RT_DFS_ELM_USE_LFN_3=y
|
||||
CONFIG_RT_DFS_ELM_USE_LFN=3
|
||||
CONFIG_RT_DFS_ELM_LFN_UNICODE_0=y
|
||||
# CONFIG_RT_DFS_ELM_LFN_UNICODE_1 is not set
|
||||
# CONFIG_RT_DFS_ELM_LFN_UNICODE_2 is not set
|
||||
# CONFIG_RT_DFS_ELM_LFN_UNICODE_3 is not set
|
||||
CONFIG_RT_DFS_ELM_LFN_UNICODE=0
|
||||
CONFIG_RT_DFS_ELM_MAX_LFN=255
|
||||
CONFIG_RT_DFS_ELM_DRIVES=2
|
||||
CONFIG_RT_DFS_ELM_MAX_SECTOR_SIZE=4096
|
||||
# CONFIG_RT_DFS_ELM_USE_ERASE is not set
|
||||
CONFIG_RT_DFS_ELM_REENTRANT=y
|
||||
CONFIG_RT_DFS_ELM_MUTEX_TIMEOUT=3000
|
||||
CONFIG_RT_USING_DFS_DEVFS=y
|
||||
# CONFIG_RT_USING_DFS_ROMFS is not set
|
||||
# CONFIG_RT_USING_DFS_RAMFS is not set
|
||||
|
||||
#
|
||||
# Device Drivers
|
||||
#
|
||||
CONFIG_RT_USING_DEVICE_IPC=y
|
||||
CONFIG_RT_PIPE_BUFSZ=512
|
||||
CONFIG_RT_USING_SYSTEM_WORKQUEUE=y
|
||||
CONFIG_RT_SYSTEM_WORKQUEUE_STACKSIZE=4096
|
||||
CONFIG_RT_SYSTEM_WORKQUEUE_PRIORITY=23
|
||||
CONFIG_RT_USING_SERIAL=y
|
||||
CONFIG_RT_USING_SERIAL_V1=y
|
||||
# CONFIG_RT_USING_SERIAL_V2 is not set
|
||||
CONFIG_RT_SERIAL_USING_DMA=y
|
||||
CONFIG_RT_SERIAL_RB_BUFSZ=64
|
||||
# CONFIG_RT_USING_CAN is not set
|
||||
# CONFIG_RT_USING_HWTIMER is not set
|
||||
# CONFIG_RT_USING_CPUTIME is not set
|
||||
# CONFIG_RT_USING_I2C is not set
|
||||
# CONFIG_RT_USING_PHY is not set
|
||||
CONFIG_RT_USING_PIN=y
|
||||
# CONFIG_RT_USING_ADC is not set
|
||||
# CONFIG_RT_USING_DAC is not set
|
||||
# CONFIG_RT_USING_PWM is not set
|
||||
# CONFIG_RT_USING_MTD_NOR is not set
|
||||
# CONFIG_RT_USING_MTD_NAND is not set
|
||||
# CONFIG_RT_USING_PM is not set
|
||||
# CONFIG_RT_USING_RTC is not set
|
||||
# CONFIG_RT_USING_SDIO is not set
|
||||
CONFIG_RT_USING_SPI=y
|
||||
# CONFIG_RT_USING_QSPI is not set
|
||||
CONFIG_RT_USING_SPI_MSD=y
|
||||
# CONFIG_RT_USING_SFUD is not set
|
||||
# CONFIG_RT_USING_ENC28J60 is not set
|
||||
# CONFIG_RT_USING_SPI_WIFI is not set
|
||||
# CONFIG_RT_USING_WDT is not set
|
||||
# CONFIG_RT_USING_AUDIO is not set
|
||||
# CONFIG_RT_USING_SENSOR is not set
|
||||
# CONFIG_RT_USING_TOUCH is not set
|
||||
# CONFIG_RT_USING_HWCRYPTO is not set
|
||||
# CONFIG_RT_USING_PULSE_ENCODER is not set
|
||||
# CONFIG_RT_USING_INPUT_CAPTURE is not set
|
||||
# CONFIG_RT_USING_WIFI is not set
|
||||
|
||||
#
|
||||
# Using USB
|
||||
#
|
||||
# CONFIG_RT_USING_USB_HOST is not set
|
||||
# CONFIG_RT_USING_USB_DEVICE is not set
|
||||
|
||||
#
|
||||
# POSIX layer and C standard library
|
||||
#
|
||||
CONFIG_RT_USING_LIBC=y
|
||||
CONFIG_RT_USING_PTHREADS=y
|
||||
CONFIG_PTHREAD_NUM_MAX=8
|
||||
CONFIG_RT_USING_POSIX=y
|
||||
# CONFIG_RT_USING_POSIX_MMAP is not set
|
||||
# CONFIG_RT_USING_POSIX_TERMIOS is not set
|
||||
# CONFIG_RT_USING_POSIX_GETLINE is not set
|
||||
# CONFIG_RT_USING_POSIX_AIO is not set
|
||||
CONFIG_RT_LIBC_USING_TIME=y
|
||||
# CONFIG_RT_USING_MODULE is not set
|
||||
CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8
|
||||
|
||||
#
|
||||
# Network
|
||||
#
|
||||
|
||||
#
|
||||
# Socket abstraction layer
|
||||
#
|
||||
CONFIG_RT_USING_SAL=y
|
||||
CONFIG_SAL_INTERNET_CHECK=y
|
||||
# CONFIG_SAL_USING_POSIX is not set
|
||||
CONFIG_SAL_SOCKETS_NUM=16
|
||||
|
||||
#
|
||||
# Network interface device
|
||||
#
|
||||
CONFIG_RT_USING_NETDEV=y
|
||||
CONFIG_NETDEV_USING_IFCONFIG=y
|
||||
CONFIG_NETDEV_USING_PING=y
|
||||
CONFIG_NETDEV_USING_NETSTAT=y
|
||||
CONFIG_NETDEV_USING_AUTO_DEFAULT=y
|
||||
# CONFIG_NETDEV_USING_IPV6 is not set
|
||||
CONFIG_NETDEV_IPV4=1
|
||||
CONFIG_NETDEV_IPV6=0
|
||||
# CONFIG_NETDEV_IPV6_SCOPES is not set
|
||||
|
||||
#
|
||||
# light weight TCP/IP stack
|
||||
#
|
||||
# CONFIG_RT_USING_LWIP is not set
|
||||
|
||||
#
|
||||
# AT commands
|
||||
#
|
||||
# CONFIG_RT_USING_AT is not set
|
||||
|
||||
#
|
||||
# VBUS(Virtual Software BUS)
|
||||
#
|
||||
# CONFIG_RT_USING_VBUS is not set
|
||||
|
||||
#
|
||||
# Utilities
|
||||
#
|
||||
# CONFIG_RT_USING_RYM is not set
|
||||
# CONFIG_RT_USING_ULOG is not set
|
||||
# CONFIG_RT_USING_UTEST is not set
|
||||
# CONFIG_RT_USING_VAR_EXPORT is not set
|
||||
# CONFIG_RT_USING_RT_LINK is not set
|
||||
|
||||
#
|
||||
# RT-Thread Utestcases
|
||||
#
|
||||
# CONFIG_RT_USING_UTESTCASES is not set
|
||||
|
||||
#
|
||||
# Board Drivers Config
|
||||
#
|
||||
|
||||
#
|
||||
# On-chip Peripheral Drivers
|
||||
#
|
||||
CONFIG___STACKSIZE__=4096
|
||||
CONFIG_BSP_USING_UART_HS=y
|
||||
# CONFIG_BSP_USING_UART1 is not set
|
||||
# CONFIG_BSP_USING_UART2 is not set
|
||||
# CONFIG_BSP_USING_UART3 is not set
|
||||
# CONFIG_BSP_USING_I2C1 is not set
|
||||
CONFIG_BSP_USING_SPI1=y
|
||||
CONFIG_BSP_SPI1_CLK_PIN=9
|
||||
CONFIG_BSP_SPI1_D0_PIN=11
|
||||
CONFIG_BSP_SPI1_D1_PIN=10
|
||||
CONFIG_BSP_SPI1_USING_SS0=y
|
||||
CONFIG_BSP_SPI1_SS0_PIN=12
|
||||
# CONFIG_BSP_SPI1_USING_SS1 is not set
|
||||
# CONFIG_BSP_SPI1_USING_SS2 is not set
|
||||
# CONFIG_BSP_SPI1_USING_SS3 is not set
|
||||
CONFIG_BSP_USING_SOFT_SPI=y
|
||||
CONFIG_BSP_SOFT_SPI_CLK_PIN=26
|
||||
CONFIG_BSP_SOFT_SPI_MOSI_PIN=27
|
||||
CONFIG_BSP_SOFT_SPI_MISO_PIN=25
|
||||
CONFIG_RT_USING_SOFT_SPI_CS0=y
|
||||
CONFIG_RT_USING_SOFT_SPI_CS0_PIN=28
|
||||
|
||||
#
|
||||
# Onboard Peripheral Drivers
|
||||
#
|
||||
CONFIG_BSP_USING_LCD=y
|
||||
CONFIG_BSP_LCD_CS_PIN=37
|
||||
CONFIG_BSP_LCD_WR_PIN=38
|
||||
CONFIG_BSP_LCD_DC_PIN=39
|
||||
CONFIG_BSP_LCD_RST_PIN=36
|
||||
CONFIG_BSP_LCD_BACKLIGHT_PIN=-1
|
||||
CONFIG_BSP_LCD_BACKLIGHT_ACTIVE_LOW=y
|
||||
# CONFIG_BSP_LCD_BACKLIGHT_ACTIVE_HIGH is not set
|
||||
CONFIG_BSP_LCD_CLK_FREQ=15000000
|
||||
CONFIG_BSP_BOARD_KD233=y
|
||||
# CONFIG_BSP_BOARD_K210_OPENMV_TEST is not set
|
||||
# CONFIG_BSP_BOARD_USER is not set
|
||||
CONFIG_BSP_LCD_X_MAX=320
|
||||
CONFIG_BSP_LCD_Y_MAX=320
|
||||
CONFIG_BSP_USING_DVP=y
|
||||
|
||||
#
|
||||
# The default pin assignment is based on the Maix Duino K210 development board
|
||||
#
|
||||
CONFIG_BSP_DVP_SCCB_SDA_PIN=47
|
||||
CONFIG_BSP_DVP_SCCB_SCLK_PIN=46
|
||||
CONFIG_BSP_DVP_CMOS_RST_PIN=40
|
||||
CONFIG_BSP_DVP_CMOS_VSYNC_PIN=45
|
||||
CONFIG_BSP_DVP_CMOS_PWDN_PIN=41
|
||||
CONFIG_BSP_DVP_CMOS_XCLK_PIN=42
|
||||
CONFIG_BSP_DVP_CMOS_PCLK_PIN=43
|
||||
CONFIG_BSP_DVP_CMOS_HREF_PIN=44
|
||||
CONFIG_BSP_USING_SDCARD=y
|
||||
|
||||
#
|
||||
# Kendryte SDK Config
|
||||
#
|
||||
CONFIG_PKG_KENDRYTE_SDK_VERNUM=0x0055
|
||||
|
||||
#
|
||||
# MicroPython
|
||||
#
|
||||
# CONFIG_PKG_USING_MICROPYTHON is not set
|
||||
|
||||
#
|
||||
# More Drivers
|
||||
#
|
||||
# CONFIG_PKG_USING_RW007 is not set
|
||||
CONFIG_DRV_USING_OV2640=y
|
||||
CONFIG_OV2640_JPEG_MODE=y
|
||||
# CONFIG_OV2640_RGB565_MODE is not set
|
||||
CONFIG_OV2640_X_RESOLUTION_IMAGE_OUTSIZE=240
|
||||
CONFIG_OV2640_Y_RESOLUTION_IMAGE_OUTSIZE=240
|
||||
CONFIG_OV2640_X_IMAGE_WINDOWS_SIZE=400
|
||||
|
||||
#
|
||||
# the value must be greater than OV2640_X_RESOLUTION_IMAGE_OUTSIZE
|
||||
#
|
||||
CONFIG_OV2640_Y_IMAGE_WINDOWS_SIZE=400
|
||||
|
||||
#
|
||||
# the value must be greater than OV2640_Y_RESOLUTION_IMAGE_OUTSIZE
|
||||
#
|
||||
# CONFIG_DRV_USING_HS300X is not set
|
||||
# CONFIG_DRV_USING_SX1278 is not set
|
||||
CONFIG_PKG_USING_WIZNET=y
|
||||
CONFIG_PKG_WIZNET_PATH="/packages/iot/wiznet"
|
||||
CONFIG_WIZ_USING_W5500=y
|
||||
# CONFIG_WIZNET_DEVICE_EXTERN_CONFIG is not set
|
||||
|
||||
#
|
||||
# WIZnet device configure
|
||||
#
|
||||
CONFIG_WIZ_SPI_DEVICE="spi10"
|
||||
CONFIG_WIZ_RST_PIN=13
|
||||
CONFIG_WIZ_IRQ_PIN=14
|
||||
CONFIG_WIZ_USING_DHCP=y
|
||||
CONFIG_WIZ_USING_PING=y
|
||||
# CONFIG_WIZ_DEBUG is not set
|
||||
# CONFIG_PKG_USING_WIZNET_V200 is not set
|
||||
CONFIG_PKG_USING_WIZNET_LATEST_VERSION=y
|
||||
CONFIG_PKG_WIZNET_VER="latest"
|
||||
|
||||
#
|
||||
# APP_Framework
|
||||
#
|
||||
|
||||
#
|
||||
# Framework
|
||||
#
|
||||
CONFIG_TRANSFORM_LAYER_ATTRIUBUTE=y
|
||||
# CONFIG_ADD_XIZI_FETURES is not set
|
||||
# CONFIG_ADD_NUTTX_FETURES is not set
|
||||
CONFIG_ADD_RTTHREAD_FETURES=y
|
||||
# CONFIG_SUPPORT_SENSOR_FRAMEWORK is not set
|
||||
# CONFIG_SUPPORT_CONNECTION_FRAMEWORK is not set
|
||||
CONFIG_SUPPORT_KNOWING_FRAMEWORK=y
|
||||
# CONFIG_USING_TENSORFLOWLITEMICRO is not set
|
||||
# CONFIG_USING_KNOWING_FILTER is not set
|
||||
# CONFIG_USING_OTA_MODEL is not set
|
||||
# CONFIG_USING_IMAGE_PROCESSING is not set
|
||||
# CONFIG_USING_CMSIS_5 is not set
|
||||
CONFIG_USING_KPU_PROCESSING=y
|
||||
CONFIG_USING_YOLOV2=y
|
||||
CONFIG_USING_YOLOV2_JSONPARSER=y
|
||||
CONFIG_USING_K210_YOLOV2_DETECT=y
|
||||
# CONFIG_USING_NNOM is not set
|
||||
# CONFIG_SUPPORT_CONTROL_FRAMEWORK is not set
|
||||
|
||||
#
|
||||
# Security
|
||||
#
|
||||
# CONFIG_CRYPTO is not set
|
||||
|
||||
#
|
||||
# Applications
|
||||
#
|
||||
|
||||
#
|
||||
# config stack size and priority of main task
|
||||
#
|
||||
CONFIG_MAIN_KTASK_STACK_SIZE=1024
|
||||
|
||||
#
|
||||
# ota app
|
||||
#
|
||||
# CONFIG_APPLICATION_OTA is not set
|
||||
|
||||
#
|
||||
# test app
|
||||
#
|
||||
# CONFIG_USER_TEST is not set
|
||||
|
||||
#
|
||||
# connection app
|
||||
#
|
||||
# CONFIG_APPLICATION_CONNECTION is not set
|
||||
|
||||
#
|
||||
# control app
|
||||
#
|
||||
|
||||
#
|
||||
# knowing app
|
||||
#
|
||||
CONFIG_APPLICATION_KNOWING=y
|
||||
CONFIG_K210_DETECT_ENTRY=y
|
||||
# CONFIG_IRIS_ML_DEMO is not set
|
||||
# CONFIG_K210_FFT_TEST is not set
|
||||
# CONFIG_USING_IMAGE_PROCESSING_APP is not set
|
||||
|
||||
#
|
||||
# sensor app
|
||||
#
|
||||
CONFIG_APPLICATION_SENSOR=y
|
||||
# CONFIG_APPLICATION_SENSOR_HCHO is not set
|
||||
# CONFIG_APPLICATION_SENSOR_TVOC is not set
|
||||
# CONFIG_APPLICATION_SENSOR_IAQ is not set
|
||||
# CONFIG_APPLICATION_SENSOR_CH4 is not set
|
||||
# CONFIG_APPLICATION_SENSOR_CO2 is not set
|
||||
# CONFIG_APPLICATION_SENSOR_PM1_0 is not set
|
||||
# CONFIG_APPLICATION_SENSOR_PM2_5 is not set
|
||||
# CONFIG_APPLICATION_SENSOR_PM10 is not set
|
||||
# CONFIG_APPLICATION_SENSOR_VOICE is not set
|
||||
# CONFIG_APPLICATION_SENSOR_TEMPERATURE is not set
|
||||
# CONFIG_APPLICATION_SENSOR_HUMIDITY is not set
|
||||
# CONFIG_APPLICATION_SENSOR_WINDDIRECTION is not set
|
||||
# CONFIG_APPLICATION_SENSOR_WINDSPEED is not set
|
||||
# CONFIG_APPLICATION_SENSOR_ALTITUDE is not set
|
||||
# CONFIG_USING_EMBEDDED_DATABASE_APP is not set
|
||||
# CONFIG_APP_USING_WEBNET is not set
|
||||
|
||||
#
|
||||
# lib
|
||||
#
|
||||
CONFIG_APP_SELECT_NEWLIB=y
|
||||
# CONFIG_APP_SELECT_OTHER_LIB is not set
|
||||
CONFIG_LIB_USING_CJSON=y
|
||||
# CONFIG_LIB_USING_QUEUE is not set
|
||||
# CONFIG_LIB_LV is not set
|
||||
|
||||
#
|
||||
# LVGL configuration
|
||||
#
|
||||
# CONFIG_LV_CONF_MINIMAL is not set
|
||||
# CONFIG_USING_EMBEDDED_DATABASE is not set
|
||||
|
|
@ -0,0 +1,228 @@
|
|||
# this
|
||||
*.old
|
||||
*.dblite
|
||||
cconfig.h
|
||||
*.bin
|
||||
*.map
|
||||
# rtconfig.h
|
||||
# .config
|
||||
|
||||
# General
|
||||
.DS_Store
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
|
||||
# Icon must end with two \r
|
||||
Icon
|
||||
|
||||
|
||||
# Thumbnails
|
||||
._*
|
||||
|
||||
# Files that might appear in the root of a volume
|
||||
.DocumentRevisions-V100
|
||||
.fseventsd
|
||||
.Spotlight-V100
|
||||
.TemporaryItems
|
||||
.Trashes
|
||||
.VolumeIcon.icns
|
||||
.com.apple.timemachine.donotpresent
|
||||
|
||||
# Directories potentially created on remote AFP share
|
||||
.AppleDB
|
||||
.AppleDesktop
|
||||
Network Trash Folder
|
||||
Temporary Items
|
||||
.apdisk
|
||||
|
||||
# Byte-compiled / optimized / DLL files
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
|
||||
# C extensions
|
||||
*.so
|
||||
|
||||
# Distribution / packaging
|
||||
.Python
|
||||
build/
|
||||
develop-eggs/
|
||||
dist/
|
||||
downloads/
|
||||
eggs/
|
||||
.eggs/
|
||||
lib/
|
||||
lib64/
|
||||
parts/
|
||||
sdist/
|
||||
var/
|
||||
wheels/
|
||||
share/python-wheels/
|
||||
*.egg-info/
|
||||
.installed.cfg
|
||||
*.egg
|
||||
MANIFEST
|
||||
|
||||
# PyInstaller
|
||||
# Usually these files are written by a python script from a template
|
||||
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
||||
*.manifest
|
||||
*.spec
|
||||
|
||||
# Installer logs
|
||||
pip-log.txt
|
||||
pip-delete-this-directory.txt
|
||||
|
||||
# Unit test / coverage reports
|
||||
htmlcov/
|
||||
.tox/
|
||||
.nox/
|
||||
.coverage
|
||||
.coverage.*
|
||||
.cache
|
||||
nosetests.xml
|
||||
coverage.xml
|
||||
*.cover
|
||||
*.py,cover
|
||||
.hypothesis/
|
||||
.pytest_cache/
|
||||
cover/
|
||||
|
||||
# Translations
|
||||
*.mo
|
||||
*.pot
|
||||
|
||||
# Django stuff:
|
||||
*.log
|
||||
local_settings.py
|
||||
db.sqlite3
|
||||
db.sqlite3-journal
|
||||
|
||||
# Flask stuff:
|
||||
instance/
|
||||
.webassets-cache
|
||||
|
||||
# Scrapy stuff:
|
||||
.scrapy
|
||||
|
||||
# Sphinx documentation
|
||||
docs/_build/
|
||||
|
||||
# PyBuilder
|
||||
.pybuilder/
|
||||
target/
|
||||
|
||||
# Jupyter Notebook
|
||||
.ipynb_checkpoints
|
||||
|
||||
# IPython
|
||||
profile_default/
|
||||
ipython_config.py
|
||||
|
||||
# pyenv
|
||||
# For a library or package, you might want to ignore these files since the code is
|
||||
# intended to run in multiple environments; otherwise, check them in:
|
||||
# .python-version
|
||||
|
||||
# pipenv
|
||||
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
||||
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
||||
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
||||
# install all needed dependencies.
|
||||
#Pipfile.lock
|
||||
|
||||
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
|
||||
__pypackages__/
|
||||
|
||||
# Celery stuff
|
||||
celerybeat-schedule
|
||||
celerybeat.pid
|
||||
|
||||
# SageMath parsed files
|
||||
*.sage.py
|
||||
|
||||
# Environments
|
||||
.env
|
||||
.venv
|
||||
env/
|
||||
venv/
|
||||
ENV/
|
||||
env.bak/
|
||||
venv.bak/
|
||||
|
||||
# Spyder project settings
|
||||
.spyderproject
|
||||
.spyproject
|
||||
|
||||
# Rope project settings
|
||||
.ropeproject
|
||||
|
||||
# mkdocs documentation
|
||||
/site
|
||||
|
||||
# mypy
|
||||
.mypy_cache/
|
||||
.dmypy.json
|
||||
dmypy.json
|
||||
|
||||
# Pyre type checker
|
||||
.pyre/
|
||||
|
||||
# pytype static type analyzer
|
||||
.pytype/
|
||||
|
||||
# Cython debug symbols
|
||||
cython_debug/
|
||||
|
||||
# Prerequisites
|
||||
*.d
|
||||
|
||||
# Object files
|
||||
*.o
|
||||
*.ko
|
||||
*.obj
|
||||
*.elf
|
||||
|
||||
# Linker output
|
||||
*.ilk
|
||||
*.map
|
||||
*.exp
|
||||
|
||||
# Precompiled Headers
|
||||
*.gch
|
||||
*.pch
|
||||
|
||||
# Libraries
|
||||
*.lib
|
||||
*.a
|
||||
*.la
|
||||
*.lo
|
||||
|
||||
# Shared objects (inc. Windows DLLs)
|
||||
*.dll
|
||||
*.so
|
||||
*.so.*
|
||||
*.dylib
|
||||
|
||||
# Executables
|
||||
*.exe
|
||||
*.out
|
||||
*.app
|
||||
*.i*86
|
||||
*.x86_64
|
||||
*.hex
|
||||
|
||||
# Debug files
|
||||
*.dSYM/
|
||||
*.su
|
||||
*.idb
|
||||
*.pdb
|
||||
|
||||
# Kernel Module Compile Results
|
||||
*.mod*
|
||||
*.cmd
|
||||
.tmp_versions/
|
||||
modules.order
|
||||
Module.symvers
|
||||
Mkfile.old
|
||||
dkms.con
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
mainmenu "XIUOS Rt-thread Configuration"
|
||||
|
||||
config ROOT_DIR
|
||||
string
|
||||
default "../../../.."
|
||||
|
||||
config BSP_DIR
|
||||
string
|
||||
default "."
|
||||
|
||||
config RT_Thread_DIR
|
||||
string
|
||||
default "../.."
|
||||
|
||||
config RTT_DIR
|
||||
string
|
||||
default "../../rt-thread"
|
||||
|
||||
config BOARD_K210_EVB
|
||||
bool
|
||||
select ARCH_RISCV64
|
||||
select ARCH_RISCV_FPU_S
|
||||
select RT_USING_COMPONENTS_INIT
|
||||
select RT_USING_USER_MAIN
|
||||
default y
|
||||
|
||||
config APP_DIR
|
||||
string
|
||||
default "../../../../APP_Framework"
|
||||
|
||||
source "$RTT_DIR/Kconfig"
|
||||
source "base-drivers/Kconfig"
|
||||
source "kendryte-sdk/Kconfig"
|
||||
source "$RT_Thread_DIR/micropython/Kconfig"
|
||||
source "$RT_Thread_DIR/app_match_rt-thread/Kconfig"
|
||||
source "$ROOT_DIR/APP_Framework/Kconfig"
|
||||
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
# 教育开发板k210_edu说明
|
||||
|
||||
## 板载资源
|
||||
|
||||
该教育开发板板载摄像头dvp接口,可外接(ov2640、ov5640等),同时还外接屏幕lcd(320*320),以及W5500网卡。
|
||||
|
||||
| 功能 | **引脚序号**<br />(并非原理图连接线序号) | 引脚定义 |
|
||||
| :---------------: | :----------------------------------------: | :------------: |
|
||||
| 高速串口作为shell | 5 | ISP_RX |
|
||||
| | 6 | ISP_TX |
|
||||
| W5500 | 9 | SPI1_ENET_SCLK |
|
||||
| | 10 | SPI1_ENET_MISO |
|
||||
| | 11 | SPI1_ENET_MOSI |
|
||||
| | 12 | SPI1_ENET_nCS |
|
||||
| | 13 | SPI1_ENET_nRST |
|
||||
| | 14 | ENET_nINT |
|
||||
| ov2640接口 | 47 | SCCB_SDA |
|
||||
| | 46 | SCCB_SCLK |
|
||||
| | 40 | CMOS_RST |
|
||||
| | 45 | CMOS_VSYNC |
|
||||
| | 41 | CMOS_PWDN |
|
||||
| | 42 | CMOS_XCLK |
|
||||
| | 43 | CMOS_PCLK |
|
||||
| | 44 | CMOS_HREF |
|
||||
| LCD接口 | 37 | LCD_CS |
|
||||
| | 38 | LCD_WR |
|
||||
| | 39 | LCD_DC |
|
||||
| | 36 | LCD_RST |
|
||||
| SD卡 | 26 | SPI_CLK |
|
||||
| | 27 | SPI_MOSI |
|
||||
| | 25 | SPI_MISO |
|
||||
| | 28 | SOFT_SPI_CS0 |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## 编译说明
|
||||
|
||||
先下载源码,进入xiuos根目录:
|
||||
|
||||
git submodule init
|
||||
git submodule update Ubiquitous/RT-Thread_Fusion_XiUOS/rt-thread
|
||||
git submodule update Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/k210_edu/kendryte-sdk/kendryte-sdk-source
|
||||
下载好相应的源码以及勘智官方K210 sdk到指定目录
|
||||
|
||||
下载risc-v的工具链,[下载地址](https://github.com/xpack-dev-tools/riscv-none-embed-gcc-xpack/releases)
|
||||
|
||||
在`rtconfig.py`中将risc-v工具链的本地路径加入文档。
|
||||
|
||||
然后执行scons编译:
|
||||
scons
|
||||
|
||||
也可以利用env工具编译,指定工具链路径
|
||||
|
||||
set RTT_EXEC_PATH=D:\xpack-riscv-none-embed-gcc-8.2.0-3.1-win32-x64\xPack\RISC-V Embedded GCC\8.2.0-3.1\bin
|
||||
|
||||
scons
|
||||
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
import os
|
||||
from building import *
|
||||
|
||||
cwd = GetCurrentDir()
|
||||
objs = []
|
||||
list = os.listdir(cwd)
|
||||
|
||||
for d in list:
|
||||
path = os.path.join(cwd, d)
|
||||
if os.path.isfile(os.path.join(path, 'SConscript')):
|
||||
objs = objs + SConscript(os.path.join(d, 'SConscript'))
|
||||
|
||||
Return('objs')
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
import os
|
||||
import sys
|
||||
import rtconfig
|
||||
|
||||
if os.getenv('RTT_ROOT'):
|
||||
RTT_ROOT = os.getenv('RTT_ROOT')
|
||||
else:
|
||||
RTT_ROOT = os.path.normpath(os.getcwd() + '/../../rt-thread')
|
||||
|
||||
sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')]
|
||||
from building import *
|
||||
|
||||
TARGET = 'rtthread.' + rtconfig.TARGET_EXT
|
||||
|
||||
DefaultEnvironment(tools=[])
|
||||
env = Environment(tools = ['mingw'],
|
||||
AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS,
|
||||
CC = rtconfig.CC, CCFLAGS = rtconfig.CFLAGS,
|
||||
CXX = rtconfig.CXX, CXXFLAGS = rtconfig.CXXFLAGS,
|
||||
AR = rtconfig.AR, ARFLAGS = '-rc',
|
||||
LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS)
|
||||
env.PrependENVPath('PATH', rtconfig.EXEC_PATH)
|
||||
# use ASPPCOM to replace ASCOM, ASPPCOM will use CFLAGS/CPPFLAGS with AS
|
||||
env['ASCOM'] = env['ASPPCOM']
|
||||
|
||||
AddOption('--compiledb',
|
||||
dest = 'compiledb',
|
||||
action = 'store_true',
|
||||
default = False,
|
||||
help = 'generate compile_commands.json')
|
||||
|
||||
if GetOption('compiledb'):
|
||||
if int(SCons.__version__.split('.')[0]) >= 4:
|
||||
env['COMPILATIONDB_USE_ABSPATH'] = True
|
||||
env.Tool('compilation_db')
|
||||
env.CompilationDatabase('compile_commands.json')
|
||||
else:
|
||||
print('Warning: --compiledb only support on SCons 4.0+')
|
||||
|
||||
Export('RTT_ROOT')
|
||||
Export('rtconfig')
|
||||
|
||||
# prepare building environment
|
||||
objs = PrepareBuilding(env, RTT_ROOT, has_libcpu = False)
|
||||
|
||||
stack_size = 4096
|
||||
|
||||
stack_lds = open('link_stacksize.lds', 'w')
|
||||
if GetDepend('__STACKSIZE__'): stack_size = GetDepend('__STACKSIZE__')
|
||||
stack_lds.write('__STACKSIZE__ = %d;' % stack_size)
|
||||
stack_lds.close()
|
||||
|
||||
# include more drivers
|
||||
objs.extend(SConscript(os.getcwd() + '/../../app_match_rt-thread/SConscript'))
|
||||
|
||||
# include APP_Framework/Framework
|
||||
objs.extend(SConscript(os.getcwd() + '/../../../../APP_Framework/Framework/SConscript'))
|
||||
|
||||
# include APP_Framework/Applications
|
||||
objs.extend(SConscript(os.getcwd() + '/../../../../APP_Framework/Applications/SConscript'))
|
||||
|
||||
# include APP_Framework/lib
|
||||
objs.extend(SConscript(os.getcwd() + '/../../../../APP_Framework/lib/SConscript'))
|
||||
|
||||
# include Ubiquitous/RT-Thread/micropython
|
||||
objs.extend(SConscript(os.getcwd() + '/../../micropython/SConscript'))
|
||||
|
||||
# make a building
|
||||
DoBuilding(TARGET, objs)
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
from building import *
|
||||
|
||||
cwd = GetCurrentDir()
|
||||
src = [
|
||||
'main.c'
|
||||
]
|
||||
CPPPATH = [cwd]
|
||||
|
||||
## 设置 lcd_test.c 的依赖宏
|
||||
if GetDepend('DRV_USING_OV2640'):
|
||||
src += ['ov2640_test.c']
|
||||
if GetDepend('BSP_USING_LCD'):
|
||||
src += ['lcd_test.c']
|
||||
## 设置 tcp_client.c 和 tcp_server.c 的依赖宏
|
||||
if GetDepend('PKG_USING_WIZNET'):
|
||||
src += ['tcp_client.c']
|
||||
src += ['tcp_server.c']
|
||||
src += ['iperf.c']
|
||||
if GetDepend('BSP_USING_SDCARD'):
|
||||
src += ['sdcard_wr_test.c']
|
||||
group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH)
|
||||
|
||||
Return('group')
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,522 @@
|
|||
/**
|
||||
* iperf-liked network performance tool
|
||||
*
|
||||
*/
|
||||
|
||||
#include <rtthread.h>
|
||||
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <sys/time.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/select.h>
|
||||
#include <netdb.h>
|
||||
|
||||
#define DBG_SECTION_NAME "iperf"
|
||||
#define DBG_LEVEL DBG_INFO
|
||||
#include <rtdbg.h>
|
||||
|
||||
#define IPERF_PORT 5001
|
||||
#define IPERF_BUFSZ (4 * 1024)
|
||||
|
||||
#define IPERF_MODE_STOP 0
|
||||
#define IPERF_MODE_SERVER 1
|
||||
#define IPERF_MODE_CLIENT 2
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int mode;
|
||||
char *host;
|
||||
int port;
|
||||
} IPERF_PARAM;
|
||||
static IPERF_PARAM param = {IPERF_MODE_STOP, NULL, IPERF_PORT};
|
||||
|
||||
static void iperf_udp_client(void *thread_param)
|
||||
{
|
||||
int sock;
|
||||
rt_uint32_t *buffer;
|
||||
struct sockaddr_in server;
|
||||
rt_uint32_t packet_count = 0;
|
||||
rt_uint32_t tick;
|
||||
int send_size;
|
||||
|
||||
send_size = IPERF_BUFSZ > 1470 ? 1470 : IPERF_BUFSZ;
|
||||
buffer = rt_malloc(IPERF_BUFSZ);
|
||||
if (buffer == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
memset(buffer, 0x00, IPERF_BUFSZ);
|
||||
sock = socket(PF_INET, SOCK_DGRAM, 0);
|
||||
if(sock < 0)
|
||||
{
|
||||
LOG_E("can't create socket! exit!");
|
||||
return;
|
||||
}
|
||||
server.sin_family = PF_INET;
|
||||
server.sin_port = htons(param.port);
|
||||
server.sin_addr.s_addr = inet_addr(param.host);
|
||||
LOG_I("iperf udp mode run...");
|
||||
while (param.mode != IPERF_MODE_STOP)
|
||||
{
|
||||
packet_count++;
|
||||
tick = rt_tick_get();
|
||||
buffer[0] = htonl(packet_count);
|
||||
buffer[1] = htonl(tick / RT_TICK_PER_SECOND);
|
||||
buffer[2] = htonl((tick % RT_TICK_PER_SECOND) * 1000);
|
||||
sendto(sock, buffer, send_size, 0, (struct sockaddr *)&server, sizeof(struct sockaddr_in));
|
||||
}
|
||||
closesocket(sock);
|
||||
rt_free(buffer);
|
||||
}
|
||||
|
||||
static void iperf_udp_server(void *thread_param)
|
||||
{
|
||||
int sock;
|
||||
rt_uint32_t *buffer;
|
||||
struct sockaddr_in server;
|
||||
struct sockaddr_in sender;
|
||||
int sender_len, r_size;
|
||||
rt_uint64_t sentlen;
|
||||
rt_uint32_t pcount = 0, last_pcount = 0;
|
||||
rt_uint32_t lost, total;
|
||||
rt_tick_t tick1, tick2;
|
||||
struct timeval timeout;
|
||||
|
||||
buffer = rt_malloc(IPERF_BUFSZ);
|
||||
if (buffer == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
sock = socket(PF_INET, SOCK_DGRAM, 0);
|
||||
if(sock < 0)
|
||||
{
|
||||
LOG_E("can't create socket! exit!");
|
||||
return;
|
||||
}
|
||||
server.sin_family = PF_INET;
|
||||
server.sin_port = htons(param.port);
|
||||
server.sin_addr.s_addr = inet_addr("0.0.0.0");
|
||||
|
||||
timeout.tv_sec = 2;
|
||||
timeout.tv_usec = 0;
|
||||
if (setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)) == -1)
|
||||
{
|
||||
LOG_E("setsockopt failed!");
|
||||
closesocket(sock);
|
||||
rt_free(buffer);
|
||||
return;
|
||||
}
|
||||
if (bind(sock, (struct sockaddr *)&server, sizeof(struct sockaddr_in)) < 0)
|
||||
{
|
||||
LOG_E("iperf server bind failed! exit!");
|
||||
closesocket(sock);
|
||||
rt_free(buffer);
|
||||
return;
|
||||
}
|
||||
while (param.mode != IPERF_MODE_STOP)
|
||||
{
|
||||
tick1 = rt_tick_get();
|
||||
tick2 = tick1;
|
||||
lost = 0;
|
||||
total = 0;
|
||||
sentlen = 0;
|
||||
while ((tick2 - tick1) < (RT_TICK_PER_SECOND * 5))
|
||||
{
|
||||
r_size = recvfrom(sock, buffer, IPERF_BUFSZ, 0, (struct sockaddr *)&sender, (socklen_t*)&sender_len);
|
||||
if (r_size > 12)
|
||||
{
|
||||
pcount = ntohl(buffer[0]);
|
||||
if (last_pcount < pcount)
|
||||
{
|
||||
lost += pcount - last_pcount - 1;
|
||||
total += pcount - last_pcount;
|
||||
}
|
||||
else
|
||||
{
|
||||
last_pcount = pcount;
|
||||
}
|
||||
last_pcount = pcount;
|
||||
sentlen += r_size;
|
||||
}
|
||||
tick2 = rt_tick_get();
|
||||
}
|
||||
if (sentlen > 0)
|
||||
{
|
||||
long data;
|
||||
int integer, decimal;
|
||||
rt_thread_t tid;
|
||||
|
||||
tid = rt_thread_self();
|
||||
data = sentlen * RT_TICK_PER_SECOND / 125 / (tick2 - tick1);
|
||||
integer = data/1000;
|
||||
decimal = data%1000;
|
||||
LOG_I("%s: %d.%03d0 Mbps! lost:%d total:%d\n", tid->name, integer, decimal, lost, total);
|
||||
}
|
||||
}
|
||||
rt_free(buffer);
|
||||
closesocket(sock);
|
||||
}
|
||||
|
||||
static void iperf_client(void *thread_param)
|
||||
{
|
||||
int i;
|
||||
int sock;
|
||||
int ret;
|
||||
int tips = 1;
|
||||
uint8_t *send_buf;
|
||||
rt_uint64_t sentlen;
|
||||
rt_tick_t tick1, tick2;
|
||||
struct sockaddr_in addr;
|
||||
|
||||
send_buf = (uint8_t *) rt_malloc(IPERF_BUFSZ);
|
||||
if (!send_buf) return ;
|
||||
|
||||
for (i = 0; i < IPERF_BUFSZ; i ++)
|
||||
send_buf[i] = i & 0xff;
|
||||
|
||||
while (param.mode != IPERF_MODE_STOP)
|
||||
{
|
||||
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
|
||||
if (sock < 0)
|
||||
{
|
||||
LOG_E("create socket failed!");
|
||||
rt_thread_delay(RT_TICK_PER_SECOND);
|
||||
continue;
|
||||
}
|
||||
|
||||
addr.sin_family = PF_INET;
|
||||
addr.sin_port = htons(param.port);
|
||||
addr.sin_addr.s_addr = inet_addr((char *)param.host);
|
||||
|
||||
ret = connect(sock, (const struct sockaddr *)&addr, sizeof(addr));
|
||||
if (ret == -1)
|
||||
{
|
||||
if (tips)
|
||||
{
|
||||
LOG_E("Connect to iperf server faile, Waiting for the server to open!");
|
||||
tips = 0;
|
||||
}
|
||||
closesocket(sock);
|
||||
rt_thread_delay(RT_TICK_PER_SECOND);
|
||||
continue;
|
||||
}
|
||||
|
||||
LOG_I("Connect to iperf server successful!");
|
||||
|
||||
{
|
||||
int flag = 1;
|
||||
|
||||
setsockopt(sock,
|
||||
IPPROTO_TCP, /* set option at TCP level */
|
||||
TCP_NODELAY, /* name of option */
|
||||
(void *) &flag, /* the cast is historical cruft */
|
||||
sizeof(int)); /* length of option value */
|
||||
}
|
||||
|
||||
sentlen = 0;
|
||||
|
||||
tick1 = rt_tick_get();
|
||||
while (param.mode != IPERF_MODE_STOP)
|
||||
{
|
||||
tick2 = rt_tick_get();
|
||||
if (tick2 - tick1 >= RT_TICK_PER_SECOND * 5)
|
||||
{
|
||||
long data;
|
||||
int integer, decimal;
|
||||
rt_thread_t tid;
|
||||
|
||||
tid = rt_thread_self();
|
||||
data = sentlen * RT_TICK_PER_SECOND / 125 / (tick2 - tick1);
|
||||
integer = data/1000;
|
||||
decimal = data%1000;
|
||||
LOG_I("%s: %d.%03d0 Mbps!", tid->name, integer, decimal);
|
||||
tick1 = tick2;
|
||||
sentlen = 0;
|
||||
}
|
||||
|
||||
ret = send(sock, send_buf, IPERF_BUFSZ, 0);
|
||||
if (ret > 0)
|
||||
{
|
||||
sentlen += ret;
|
||||
}
|
||||
|
||||
if (ret < 0) break;
|
||||
}
|
||||
|
||||
closesocket(sock);
|
||||
|
||||
rt_thread_delay(RT_TICK_PER_SECOND * 2);
|
||||
LOG_W("Disconnected, iperf server shut down!");
|
||||
tips = 1;
|
||||
}
|
||||
rt_free(send_buf);
|
||||
}
|
||||
|
||||
void iperf_server(void *thread_param)
|
||||
{
|
||||
uint8_t *recv_data;
|
||||
socklen_t sin_size;
|
||||
rt_tick_t tick1, tick2;
|
||||
int sock = -1, connected, bytes_received;
|
||||
rt_uint64_t recvlen;
|
||||
struct sockaddr_in server_addr, client_addr;
|
||||
fd_set readset;
|
||||
struct timeval timeout;
|
||||
|
||||
recv_data = (uint8_t *)rt_malloc(IPERF_BUFSZ);
|
||||
if (recv_data == RT_NULL)
|
||||
{
|
||||
LOG_E("No memory!");
|
||||
goto __exit;
|
||||
}
|
||||
|
||||
sock = socket(AF_INET, SOCK_STREAM, 0);
|
||||
if (sock < 0)
|
||||
{
|
||||
LOG_E("Socket error!");
|
||||
goto __exit;
|
||||
}
|
||||
|
||||
server_addr.sin_family = AF_INET;
|
||||
server_addr.sin_port = htons(param.port);
|
||||
server_addr.sin_addr.s_addr = INADDR_ANY;
|
||||
memset(&(server_addr.sin_zero), 0x0, sizeof(server_addr.sin_zero));
|
||||
|
||||
if (bind(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1)
|
||||
{
|
||||
LOG_E("Unable to bind!");
|
||||
goto __exit;
|
||||
}
|
||||
|
||||
if (listen(sock, 5) == -1)
|
||||
{
|
||||
LOG_E("Listen error!");
|
||||
goto __exit;
|
||||
}
|
||||
|
||||
timeout.tv_sec = 3;
|
||||
timeout.tv_usec = 0;
|
||||
|
||||
while (param.mode != IPERF_MODE_STOP)
|
||||
{
|
||||
FD_ZERO(&readset);
|
||||
FD_SET(sock, &readset);
|
||||
|
||||
if (select(sock + 1, &readset, RT_NULL, RT_NULL, &timeout) == 0)
|
||||
continue;
|
||||
|
||||
sin_size = sizeof(struct sockaddr_in);
|
||||
|
||||
connected = accept(sock, (struct sockaddr *)&client_addr, &sin_size);
|
||||
|
||||
LOG_I("new client connected from (%s, %d)",
|
||||
inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));
|
||||
|
||||
{
|
||||
int flag = 1;
|
||||
|
||||
setsockopt(connected,
|
||||
IPPROTO_TCP, /* set option at TCP level */
|
||||
TCP_NODELAY, /* name of option */
|
||||
(void *) &flag, /* the cast is historical cruft */
|
||||
sizeof(int)); /* length of option value */
|
||||
}
|
||||
|
||||
recvlen = 0;
|
||||
tick1 = rt_tick_get();
|
||||
while (param.mode != IPERF_MODE_STOP)
|
||||
{
|
||||
bytes_received = recv(connected, recv_data, IPERF_BUFSZ, 0);
|
||||
if (bytes_received <= 0) break;
|
||||
|
||||
recvlen += bytes_received;
|
||||
|
||||
tick2 = rt_tick_get();
|
||||
if (tick2 - tick1 >= RT_TICK_PER_SECOND * 5)
|
||||
{
|
||||
long data;
|
||||
int integer, decimal;
|
||||
rt_thread_t tid;
|
||||
|
||||
tid = rt_thread_self();
|
||||
data = recvlen * RT_TICK_PER_SECOND / 125 / (tick2 - tick1);
|
||||
integer = data/1000;
|
||||
decimal = data%1000;
|
||||
LOG_I("%s: %d.%03d0 Mbps!", tid->name, integer, decimal);
|
||||
tick1 = tick2;
|
||||
recvlen = 0;
|
||||
}
|
||||
}
|
||||
LOG_W("client disconnected (%s, %d)",
|
||||
inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));
|
||||
if (connected >= 0) closesocket(connected);
|
||||
connected = -1;
|
||||
}
|
||||
|
||||
__exit:
|
||||
if (sock >= 0) closesocket(sock);
|
||||
if (recv_data) rt_free(recv_data);
|
||||
}
|
||||
|
||||
void iperf_usage(void)
|
||||
{
|
||||
rt_kprintf("Usage: iperf [-s|-c host] [options] [multi-threaded]\n");
|
||||
rt_kprintf(" iperf [-h|--stop]\n");
|
||||
rt_kprintf("\n");
|
||||
rt_kprintf("Client/Server:\n");
|
||||
rt_kprintf(" -p # server port to listen on/connect to\n");
|
||||
rt_kprintf("\n");
|
||||
rt_kprintf("Server specific:\n");
|
||||
rt_kprintf(" -s run in server mode\n");
|
||||
rt_kprintf("\n");
|
||||
rt_kprintf("Client specific:\n");
|
||||
rt_kprintf(" -c <host> run in client mode, connecting to <host>\n");
|
||||
rt_kprintf("\n");
|
||||
rt_kprintf("Miscellaneous:\n");
|
||||
rt_kprintf(" -h print this message and quit\n");
|
||||
rt_kprintf(" --stop stop iperf program\n");
|
||||
rt_kprintf(" -u testing UDP protocol\n");
|
||||
rt_kprintf(" -m <time> the number of multi-threaded ");
|
||||
return;
|
||||
}
|
||||
|
||||
int iperf(int argc, char **argv)
|
||||
{
|
||||
int mode = 0; /* server mode */
|
||||
char *host = NULL;
|
||||
int port = IPERF_PORT;
|
||||
int numtid = 1;
|
||||
int use_udp = 0;
|
||||
int index = 1;
|
||||
|
||||
if (argc == 1)
|
||||
{
|
||||
goto __usage;
|
||||
}
|
||||
if (strcmp(argv[1], "-u") == 0)
|
||||
{
|
||||
index = 2;
|
||||
use_udp = 1;
|
||||
}
|
||||
if (strcmp(argv[index], "-h") == 0) goto __usage;
|
||||
else if (strcmp(argv[index], "--stop") == 0)
|
||||
{
|
||||
/* stop iperf */
|
||||
param.mode = IPERF_MODE_STOP;
|
||||
return 0;
|
||||
}
|
||||
else if (strcmp(argv[index], "-s") == 0)
|
||||
{
|
||||
mode = IPERF_MODE_SERVER; /* server mode */
|
||||
|
||||
/* iperf -s -p 5000 */
|
||||
if (argc >= 4)
|
||||
{
|
||||
if (strcmp(argv[index + 1], "-p") == 0)
|
||||
{
|
||||
port = atoi(argv[index + 2]);
|
||||
}
|
||||
else goto __usage;
|
||||
}
|
||||
}
|
||||
else if (strcmp(argv[index], "-c") == 0)
|
||||
{
|
||||
mode = IPERF_MODE_CLIENT; /* client mode */
|
||||
if (argc < 3) goto __usage;
|
||||
|
||||
host = argv[index + 1];
|
||||
if (argc >= 5)
|
||||
{
|
||||
/* iperf -c host -p port */
|
||||
if (strcmp(argv[index + 2], "-p") == 0)
|
||||
{
|
||||
port = atoi(argv[index + 3]);
|
||||
}
|
||||
else goto __usage;
|
||||
}
|
||||
}
|
||||
else goto __usage;
|
||||
|
||||
if (argc >= 7)
|
||||
{
|
||||
if(strcmp(argv[argc - 2], "-m") == 0)
|
||||
{
|
||||
numtid = atoi(argv[argc - 1]);
|
||||
}
|
||||
else goto __usage;
|
||||
}
|
||||
|
||||
/* start iperf */
|
||||
if (param.mode == IPERF_MODE_STOP)
|
||||
{
|
||||
int i = 0;
|
||||
char tid_name[RT_NAME_MAX + 1] = {0};
|
||||
|
||||
param.mode = mode;
|
||||
param.port = port;
|
||||
if (param.host)
|
||||
{
|
||||
rt_free(param.host);
|
||||
param.host = NULL;
|
||||
}
|
||||
if (host) param.host = rt_strdup(host);
|
||||
|
||||
for (i = 0; i < numtid; i++)
|
||||
{
|
||||
rt_thread_t tid = RT_NULL;
|
||||
void (*function)(void *parameter);
|
||||
|
||||
if (use_udp)
|
||||
{
|
||||
if (mode == IPERF_MODE_CLIENT)
|
||||
{
|
||||
rt_snprintf(tid_name, sizeof(tid_name), "iperfc%02d", i + 1);
|
||||
function = iperf_udp_client;
|
||||
}
|
||||
else if (mode == IPERF_MODE_SERVER)
|
||||
{
|
||||
rt_snprintf(tid_name, sizeof(tid_name), "iperfd%02d", i + 1);
|
||||
function = iperf_udp_server;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mode == IPERF_MODE_CLIENT)
|
||||
{
|
||||
rt_snprintf(tid_name, sizeof(tid_name), "iperfc%02d", i + 1);
|
||||
function = iperf_client;
|
||||
}
|
||||
else if (mode == IPERF_MODE_SERVER)
|
||||
{
|
||||
rt_snprintf(tid_name, sizeof(tid_name), "iperfd%02d", i + 1);
|
||||
function = iperf_server;
|
||||
}
|
||||
}
|
||||
|
||||
tid = rt_thread_create(tid_name, function, RT_NULL, 2048, 20, 100);
|
||||
if (tid) rt_thread_startup(tid);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
rt_kprintf("Please stop iperf firstly, by:\n");
|
||||
rt_kprintf("iperf --stop\n");
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
__usage:
|
||||
iperf_usage();
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef FINSH_USING_MSH
|
||||
#include <finsh.h>
|
||||
MSH_CMD_EXPORT(iperf, the network bandwidth measurement tool);
|
||||
#endif
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
/*
|
||||
* @Author: your name
|
||||
* @Date: 2021-10-11 22:04:25
|
||||
* @LastEditTime: 2021-10-14 11:12:52
|
||||
* @LastEditors: Please set LastEditors
|
||||
* @Description: In User Settings Edit
|
||||
* @FilePath: \xiuos\Ubiquitous\RT_Thread\bsp\k210\applications\main.c
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
#include <rtthread.h>
|
||||
#include <rtdevice.h>
|
||||
#include <stdio.h>
|
||||
#define LED_G 29
|
||||
#define KEY0_PIN_NUM 31
|
||||
|
||||
extern int msh_exec(char *cmd, rt_size_t length);
|
||||
/* 中断回调函数 */
|
||||
void beep_on(void *args)
|
||||
{
|
||||
rt_kprintf("The KEY is pressed!\n");
|
||||
}
|
||||
|
||||
static void key_sample(void)
|
||||
{
|
||||
/* 按键0引脚为输入模式 */
|
||||
rt_pin_mode(KEY0_PIN_NUM, PIN_MODE_INPUT_PULLUP);
|
||||
/* 绑定中断,下降沿模式,回调函数名为beep_on */
|
||||
rt_pin_attach_irq(KEY0_PIN_NUM, PIN_IRQ_MODE_FALLING, beep_on, RT_NULL);
|
||||
/* 使能中断 */
|
||||
rt_pin_irq_enable(KEY0_PIN_NUM, PIN_IRQ_ENABLE);
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
|
||||
/**
|
||||
such as :Power on Run commands
|
||||
static char detect_start[] = "ov2640_test 0";
|
||||
msh_exec(detect_start,rt_strlen(detect_start));
|
||||
**/
|
||||
|
||||
rt_pin_mode(LED_G, PIN_MODE_OUTPUT);
|
||||
rt_thread_mdelay(100);
|
||||
char info1[25] ={0};
|
||||
char info2[25] ={0};
|
||||
sprintf(info1,"xuos-intelligence k210 ");
|
||||
sprintf(info2,"build %s %s",__DATE__,__TIME__);
|
||||
printf("%s %s \n",info1,info2);
|
||||
key_sample();
|
||||
#ifdef BSP_USING_LCD
|
||||
#include<drv_lcd.h>
|
||||
lcd_show_string(0,60,24,info1);
|
||||
lcd_show_string(0,90,24,info2);
|
||||
#endif
|
||||
while(1)
|
||||
{
|
||||
|
||||
rt_pin_write(LED_G, PIN_HIGH);
|
||||
rt_thread_mdelay(500);
|
||||
rt_pin_write(LED_G, PIN_LOW);
|
||||
rt_thread_mdelay(500);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,151 @@
|
|||
#include <rtthread.h>
|
||||
#include <rtdevice.h>
|
||||
#include "stdio.h"
|
||||
#include "string.h"
|
||||
#include "dvp.h"
|
||||
#include "fpioa.h"
|
||||
#include "plic.h"
|
||||
#include "sysctl.h"
|
||||
#if(defined DRV_USING_OV2640 && defined BSP_USING_LCD)
|
||||
#include<drv_ov2640.h>
|
||||
#include<drv_lcd.h>
|
||||
#define RGB_BUF_SIZE (320*240*2)
|
||||
#define RGB_BUF_RGB888_BUF_SIZE (320*240*2)
|
||||
#ifdef RT_USING_POSIX
|
||||
#include <pthread.h>
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <dfs_poll.h>
|
||||
#ifdef RT_USING_POSIX_TERMIOS
|
||||
#include <posix_termios.h>
|
||||
#endif
|
||||
#endif
|
||||
static int g_fd = 0;
|
||||
static _ioctl_shoot_para shoot_para_t = {0};
|
||||
|
||||
extern void lcd_show_image(int x, int y, int wide, int height,const rt_uint8_t *buf);
|
||||
extern void lcd_draw_picture(uint16_t x1, uint16_t y1, uint16_t width, uint16_t height, uint32_t *ptr);
|
||||
|
||||
void resize_rgb565in_rgb888out(uint8_t *camera_image, uint8_t *resize_image,uint8_t height,uint8_t width)
|
||||
{
|
||||
uint8_t *psrc_temp = (uint8_t *)camera_image;
|
||||
uint8_t *pdst_temp = (uint8_t *)resize_image;
|
||||
for (int y = 0; y < height; y++)
|
||||
{
|
||||
for (int x = 0; x < width; x++)
|
||||
{
|
||||
uint8_t pixel_lo = *psrc_temp++;
|
||||
uint8_t pixel_hi = *psrc_temp++;
|
||||
*pdst_temp++ = (0xF8 & pixel_hi);
|
||||
*pdst_temp++ = ((0x07 & pixel_hi) << 5) | ((0xE0 & pixel_lo) >> 3);
|
||||
*pdst_temp++ = (0x1F & pixel_lo) << 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ov2640_test(int argc, char **argv)
|
||||
{
|
||||
uint16_t * ppp = NULL;
|
||||
g_fd = open("/dev/ov2640",O_RDONLY);
|
||||
if(g_fd < 0)
|
||||
{
|
||||
printf("open ov2640 fail !!");
|
||||
return;
|
||||
}
|
||||
if (argc < 2)
|
||||
{
|
||||
printf("Usage:ov2640 display images in real time or take photos \n");
|
||||
printf("Like: ov2640_test 1(take photos )\n");
|
||||
printf("Like: ov2640_test 0(display images in real time )\n");
|
||||
close(g_fd);
|
||||
return ;
|
||||
}
|
||||
uint32_t* rgbbuffer = rt_malloc(RGB_BUF_SIZE);
|
||||
uint16_t* rgbbuffer888 = rt_malloc(RGB_BUF_RGB888_BUF_SIZE);
|
||||
rt_thread_t tid;
|
||||
rt_err_t ret = 0;
|
||||
int temf = 0;
|
||||
if(NULL == rgbbuffer)
|
||||
{
|
||||
printf("malloc rgbbuffer failed ! \n");
|
||||
close(g_fd);
|
||||
return;
|
||||
}
|
||||
temf = strtoul(argv[1],0, 10);
|
||||
printf("ov2640_test choose %d mode \n",temf);
|
||||
shoot_para_t.pdata = (uint32_t)(rgbbuffer);
|
||||
shoot_para_t.length = RGB_BUF_SIZE;
|
||||
lcd_clear(WHITE);
|
||||
if(temf == 0)
|
||||
{
|
||||
void lcd_show_ov2640_thread(uint32_t* rgbbuffer);
|
||||
tid = rt_thread_create("lcdshow", lcd_show_ov2640_thread, rgbbuffer,3000, 9, 20);
|
||||
rt_thread_startup(tid);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
ret = ioctl(g_fd,IOCTRL_CAMERA_START_SHOT,&shoot_para_t);
|
||||
|
||||
if(RT_ERROR == ret)
|
||||
{
|
||||
printf("ov2640 can't wait event flag");
|
||||
close(g_fd);
|
||||
return;
|
||||
}
|
||||
|
||||
//resize_rgb565in_rgb888out(rgbbuffer,rgbbuffer888,320,240);
|
||||
memset(rgbbuffer888,0,RGB_BUF_RGB888_BUF_SIZE);
|
||||
ppp = rgbbuffer888;
|
||||
|
||||
printf("===========================\n\r");
|
||||
for(int i = 0 ;i <320*240;i++)
|
||||
{
|
||||
if(i < 320*240/2)
|
||||
{
|
||||
*(ppp+i) = 0X7FF;
|
||||
}
|
||||
else
|
||||
{
|
||||
*(ppp+i) = YELLOW;
|
||||
}
|
||||
|
||||
}
|
||||
lcd_show_image(0, 0, 320, 240, (char*)rgbbuffer888);
|
||||
rt_thread_mdelay(100);
|
||||
printf("the lcd has shown the image \n");
|
||||
rt_free(rgbbuffer);
|
||||
close(g_fd);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
MSH_CMD_EXPORT(ov2640_test,lcd show camera shot image);
|
||||
|
||||
void lcd_show_ov2640_thread(uint32_t* rgbbuffer)
|
||||
{
|
||||
rt_err_t ret = 0;
|
||||
int i = 0;
|
||||
while(1)
|
||||
{
|
||||
|
||||
//memset(rgbbuffer,0,320*240*2);
|
||||
ret = ioctl(g_fd,IOCTRL_CAMERA_START_SHOT,&shoot_para_t);
|
||||
if(RT_ERROR == ret)
|
||||
{
|
||||
printf("ov2640 can't wait event flag");
|
||||
rt_free(rgbbuffer);
|
||||
return;
|
||||
}
|
||||
//lcd_show_image(0, 0, 320, 240, rgbbuffer);
|
||||
lcd_draw_picture(0, 0, 320-1, 240-1, rgbbuffer);
|
||||
rt_thread_mdelay(2);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
#include <rtthread.h>
|
||||
#include <rtdevice.h>
|
||||
#include <stdio.h>
|
||||
#ifdef RT_USING_POSIX
|
||||
#include <dfs_posix.h>
|
||||
#include <dfs_poll.h>
|
||||
#endif
|
||||
|
||||
#define WRITE_SIZE (1024)
|
||||
#define ONCE_SIZE (256)
|
||||
#define BIG_BLOCK (1024*1024*2)
|
||||
void sd_write_speed_test()
|
||||
{
|
||||
printf("sd_write_speed_test \n");
|
||||
int fd = 0;
|
||||
int ret = 0;
|
||||
rt_uint32_t tick1 = rt_tick_get();
|
||||
char ready_writedata[ONCE_SIZE] ={0};
|
||||
memset(ready_writedata,0xAE,ONCE_SIZE);
|
||||
|
||||
char *ready_writedata1 = NULL;
|
||||
|
||||
ready_writedata1 = rt_malloc(BIG_BLOCK);
|
||||
memset(ready_writedata1,0xBE,BIG_BLOCK);
|
||||
|
||||
printf("the moment tick is %d\n",tick1);
|
||||
fd = open("/ready_writedata", O_WRONLY | O_CREAT);
|
||||
if(fd >0)
|
||||
{
|
||||
printf("fd >0 \n");
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("fd <0 \n");
|
||||
return;
|
||||
}
|
||||
|
||||
for(int i = 0;i <1;i++)
|
||||
{
|
||||
|
||||
ret = write(fd,ready_writedata1,BIG_BLOCK);
|
||||
}
|
||||
rt_uint32_t tick2 = rt_tick_get();
|
||||
printf("ret is %d \n",ret);
|
||||
printf("the moment tick is %d\n",tick2);
|
||||
printf(" time-consuming %d s\n",(tick2 - tick1)/1000);
|
||||
ret = close(fd);
|
||||
printf("ret is %d \n",ret);
|
||||
free(ready_writedata1);
|
||||
return;
|
||||
|
||||
}
|
||||
MSH_CMD_EXPORT(sd_write_speed_test,write_speed);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,144 @@
|
|||
/*
|
||||
* 程序清单:tcp 客户端
|
||||
*
|
||||
* 这是一个 tcp 客户端的例程
|
||||
* 导出 tcpclient 命令到控制终端
|
||||
* 命令调用格式:tcpclient URL PORT
|
||||
* URL:服务器地址 PORT::端口号
|
||||
* 程序功能:接收并显示从服务端发送过来的信息,接收到开头是 'q' 或 'Q' 的信息退出程序
|
||||
* Created by Ybeichen on 2022/7/28.
|
||||
*/
|
||||
|
||||
#include "tcp_client.h"
|
||||
#include <rtthread.h>
|
||||
#include <wiz_socket.h> /* 使用BSD socket,需要包含socket.h头文件 */
|
||||
#include <netdb.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define BUFSZ 1024
|
||||
|
||||
static const char send_data[] = "This is TCP Client from RT-Thread."; /* 发送用到的数据 */
|
||||
static void tcp_client(int argc, char **argv)
|
||||
{
|
||||
int ret;
|
||||
char *recv_data;
|
||||
struct hostent *host;
|
||||
int sock, bytes_received;
|
||||
struct sockaddr_in server_addr;
|
||||
const char *url;
|
||||
int port;
|
||||
|
||||
if (argc < 3)
|
||||
{
|
||||
rt_kprintf("Usage: tcp_client URL PORT\n");
|
||||
rt_kprintf("Like: tcp_client 192.168.12.44 5000\n");
|
||||
return ;
|
||||
}
|
||||
|
||||
url = argv[1];
|
||||
port = strtoul(argv[2], 0, 10);
|
||||
|
||||
/* 通过函数入口参数url获得host地址(如果是域名,会做域名解析) */
|
||||
host = gethostbyname(url);
|
||||
|
||||
/* 分配用于存放接收数据的缓冲 */
|
||||
recv_data = rt_malloc(BUFSZ);
|
||||
if (recv_data == RT_NULL)
|
||||
{
|
||||
rt_kprintf("No memory\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* 创建一个socket,类型是SOCKET_STREAM,TCP类型 */
|
||||
if ((sock = socket(AF_WIZ, SOCK_STREAM, 0)) == -1)
|
||||
{
|
||||
/* 创建socket失败 */
|
||||
rt_kprintf("Socket error\n");
|
||||
|
||||
/* 释放已分配的接收缓冲 */
|
||||
rt_free(recv_data);
|
||||
return;
|
||||
}
|
||||
|
||||
/* 初始化预连接的服务端地址 */
|
||||
server_addr.sin_family = AF_WIZ;
|
||||
server_addr.sin_port = htons(port);
|
||||
server_addr.sin_addr = *((struct in_addr *)host->h_addr);
|
||||
rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero));
|
||||
|
||||
/* 连接到服务端 */
|
||||
if (connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1)
|
||||
{
|
||||
/* 连接失败 */
|
||||
rt_kprintf("Connect fail!\n");
|
||||
closesocket(sock);
|
||||
|
||||
/*释放接收缓冲 */
|
||||
rt_free(recv_data);
|
||||
return;
|
||||
}
|
||||
|
||||
while (1)
|
||||
{
|
||||
/* 从sock连接中接收最大BUFSZ - 1字节数据 */
|
||||
bytes_received = recv(sock, recv_data, BUFSZ - 1, 0);
|
||||
if (bytes_received < 0)
|
||||
{
|
||||
/* 接收失败,关闭这个连接 */
|
||||
closesocket(sock);
|
||||
rt_kprintf("\nreceived error,close the socket.\r\n");
|
||||
|
||||
/* 释放接收缓冲 */
|
||||
rt_free(recv_data);
|
||||
break;
|
||||
}
|
||||
else if (bytes_received == 0)
|
||||
{
|
||||
/* 默认 recv 为阻塞模式,此时收到0认为连接出错,关闭这个连接 */
|
||||
closesocket(sock);
|
||||
rt_kprintf("\nreceived error,close the socket.\r\n");
|
||||
|
||||
/* 释放接收缓冲 */
|
||||
rt_free(recv_data);
|
||||
break;
|
||||
}
|
||||
|
||||
/* 有接收到数据,把末端清零 */
|
||||
recv_data[bytes_received] = '\0';
|
||||
|
||||
if (strncmp(recv_data, "q", 1) == 0 || strncmp(recv_data, "Q", 1) == 0)
|
||||
{
|
||||
/* 如果是首字母是q或Q,关闭这个连接 */
|
||||
closesocket(sock);
|
||||
rt_kprintf("\n got a 'q' or 'Q',close the socket.\r\n");
|
||||
|
||||
/* 释放接收缓冲 */
|
||||
rt_free(recv_data);
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* 在控制终端显示收到的数据 */
|
||||
rt_kprintf("\nReceived data = %s ", recv_data);
|
||||
}
|
||||
|
||||
/* 发送数据到sock连接 */
|
||||
ret = send(sock, send_data, strlen(send_data), 0);
|
||||
if (ret < 0)
|
||||
{
|
||||
/* 接收失败,关闭这个连接 */
|
||||
closesocket(sock);
|
||||
rt_kprintf("\nsend error,close the socket.\r\n");
|
||||
|
||||
rt_free(recv_data);
|
||||
break;
|
||||
}
|
||||
else if (ret == 0)
|
||||
{
|
||||
/* 打印send函数返回值为0的警告信息 */
|
||||
rt_kprintf("\n Send warning,send function return 0.\r\n");
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
MSH_CMD_EXPORT(tcp_client, a tcp client sample);
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
//
|
||||
// Created by Y北辰 on 2022/7/28.
|
||||
//
|
||||
|
||||
#ifndef RT_THREAD_FUSION_XIUOS_TCP_CLIENT_H
|
||||
#define RT_THREAD_FUSION_XIUOS_TCP_CLIENT_H
|
||||
|
||||
static void tcpclient(int argc, char **argv);
|
||||
|
||||
#endif //RT_THREAD_FUSION_XIUOS_TCP_CLIENT_H
|
||||
|
||||
|
|
@ -0,0 +1,174 @@
|
|||
/*
|
||||
* 程序清单:tcp 服务端
|
||||
*
|
||||
* 这是一个 tcp 服务端的例程
|
||||
* 导出 tcp_server 命令到控制终端
|
||||
* 命令调用格式:tcp_server
|
||||
* 无参数
|
||||
* 程序功能:作为一个服务端,接收并显示客户端发来的数据 ,接收到 exit 退出程序
|
||||
* Created by Ybeichen on 2022/7/28.
|
||||
*/
|
||||
|
||||
#include "tcp_server.h"
|
||||
#include <rtthread.h>
|
||||
#include <wiz_socket.h> /* 使用BSD socket,需要包含socket.h头文件 */
|
||||
#include "netdb.h"
|
||||
#include <rtdef.h>
|
||||
#include <errno.h>
|
||||
|
||||
#define BUFSZ (2048)
|
||||
static int port = 5000;
|
||||
static int is_running = 0; /* 停止标志 */
|
||||
static const char send_data[] = "This is TCP Server from RT-Thread."; /* 发送用到的数据 */
|
||||
|
||||
static void tcp_server(void *argr)
|
||||
{
|
||||
char *recv_data; /* 用于接收的指针,后面会做一次动态分配以请求可用内存 */
|
||||
socklen_t sin_size;
|
||||
int sock, connected, bytes_received;
|
||||
struct sockaddr_in server_addr, client_addr;
|
||||
int ret;
|
||||
|
||||
recv_data = rt_malloc(BUFSZ + 1); /* 分配接收用的数据缓冲 */
|
||||
if (recv_data == RT_NULL)
|
||||
{
|
||||
rt_kprintf("No memory\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* 创建一个socket,类型是SOCKET_STREAM,TCP类型 */
|
||||
if ((sock = socket(AF_WIZ, SOCK_STREAM, IPPROTO_TCP)) == -1)
|
||||
{
|
||||
/* 创建socket失败 */
|
||||
rt_kprintf("Socket error\n");
|
||||
|
||||
/* 释放已分配的接收缓冲 */
|
||||
rt_free(recv_data);
|
||||
return;
|
||||
}
|
||||
|
||||
/* 初始化本地服务端地址 */
|
||||
server_addr.sin_family = AF_WIZ;
|
||||
server_addr.sin_port = htons(port); /* 服务端工作的端口 */
|
||||
server_addr.sin_addr.s_addr = INADDR_ANY;
|
||||
rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero));
|
||||
|
||||
/* 绑定socket到服务端地址 */
|
||||
if (bind(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1)
|
||||
{
|
||||
/* 绑定失败 */
|
||||
rt_kprintf("Unable to bind\n");
|
||||
|
||||
/* 释放已分配的接收缓冲 */
|
||||
rt_free(recv_data);
|
||||
return;
|
||||
}
|
||||
|
||||
/* 在socket上进行监听 */
|
||||
if (listen(sock, 5) == -1)
|
||||
{
|
||||
rt_kprintf("Listen error\n");
|
||||
|
||||
/* release recv buffer */
|
||||
rt_free(recv_data);
|
||||
return;
|
||||
}
|
||||
|
||||
rt_kprintf("\nTCPServer Waiting for client on port %d...\n", port);
|
||||
|
||||
is_running=1;
|
||||
while (is_running)
|
||||
{
|
||||
|
||||
/* 接受一个客户端连接socket的请求,这个函数调用是阻塞式的 */
|
||||
connected = accept(sock, (struct sockaddr *)&client_addr, (socklen_t *)sizeof(struct sockaddr_in));
|
||||
/* 返回的是连接成功的socket */
|
||||
if (connected < 0)
|
||||
{
|
||||
rt_kprintf("accept connection failed! errno = %d\n", errno);
|
||||
/* release recv buffer */
|
||||
rt_free(recv_data);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* 接受返回的client_addr指向了客户端的地址信息 */
|
||||
rt_kprintf("I got a connection from (%s , %d)\n",
|
||||
inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));
|
||||
|
||||
/* 客户端连接的处理 */
|
||||
while (is_running)
|
||||
{
|
||||
/* 发送数据到connected socket */
|
||||
ret = send(connected, send_data, strlen(send_data), 0);
|
||||
if (ret < 0)
|
||||
{
|
||||
/* 发送失败,关闭这个连接 */
|
||||
rt_kprintf("\nsend error,close the socket.\r\n");
|
||||
closesocket(connected);
|
||||
/* 释放接收缓冲 */
|
||||
rt_free(recv_data);
|
||||
break;
|
||||
}
|
||||
else if (ret == 0)
|
||||
{
|
||||
/* 打印send函数返回值为0的警告信息 */
|
||||
rt_kprintf("\n Send warning,send function return 0.\r\n");
|
||||
|
||||
}
|
||||
|
||||
/* 从connected socket中接收数据,接收buffer是1024大小,但并不一定能够收到1024大小的数据 */
|
||||
bytes_received = recv(connected, recv_data, BUFSZ, 0);
|
||||
if (bytes_received < 0)
|
||||
{
|
||||
/* 接收失败,关闭这个connected socket */
|
||||
rt_kprintf("\nReceived error, close the connect.\r\n");
|
||||
closesocket(connected);
|
||||
/* 释放接收缓冲 */
|
||||
rt_free(recv_data);
|
||||
break;
|
||||
}
|
||||
else if (bytes_received == 0)
|
||||
{
|
||||
/* 打印recv函数返回值为0的警告信息 */
|
||||
rt_kprintf("\nReceived warning,recv function return 0.\r\n");
|
||||
closesocket(connected);
|
||||
/* 释放接收缓冲 */
|
||||
rt_free(recv_data);
|
||||
break;
|
||||
}
|
||||
|
||||
/* 有接收到数据,把末端清零 */
|
||||
recv_data[bytes_received] = '\0';
|
||||
if (strncmp(recv_data, "q", 1) == 0 || strncmp(recv_data, "Q", 1) == 0)
|
||||
{
|
||||
/* 如果是首字母是q或Q,关闭这个连接 */
|
||||
rt_kprintf("\nGot a 'q' or 'Q', close the connect.\r\n");
|
||||
closesocket(connected);
|
||||
/* 释放接收缓冲 */
|
||||
rt_free(recv_data);
|
||||
break;
|
||||
}
|
||||
else if (strcmp(recv_data, "exit") == 0)
|
||||
{
|
||||
/* 如果接收的是exit,则关闭整个服务端 */
|
||||
closesocket(connected);
|
||||
is_running=0;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* 在控制终端显示收到的数据 */
|
||||
rt_kprintf("RECEIVED DATA = %s \n", recv_data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 退出服务 */
|
||||
closesocket(sock);
|
||||
|
||||
/* 释放接收缓冲 */
|
||||
rt_free(recv_data);
|
||||
|
||||
return;
|
||||
}
|
||||
MSH_CMD_EXPORT(tcp_server, a tcp server sample);
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
//
|
||||
// Created by Y北辰 on 2022/7/28.
|
||||
//
|
||||
|
||||
#ifndef RT_THREAD_FUSION_XIUOS_TCP_SERVER_H
|
||||
#define RT_THREAD_FUSION_XIUOS_TCP_SERVER_H
|
||||
|
||||
static void tcp_server(void *argr);
|
||||
|
||||
#endif //RT_THREAD_FUSION_XIUOS_TCP_SERVER_H
|
||||
|
||||
|
|
@ -0,0 +1,248 @@
|
|||
menu "Board Drivers Config"
|
||||
|
||||
menu "On-chip Peripheral Drivers"
|
||||
config __STACKSIZE__
|
||||
int "stack size for interrupt"
|
||||
default 4096
|
||||
config BSP_USING_UART_HS
|
||||
bool "Enable High Speed UART"
|
||||
default n
|
||||
menuconfig BSP_USING_UART1
|
||||
bool "Enable UART1"
|
||||
default n
|
||||
if BSP_USING_UART1
|
||||
config BSP_UART1_TXD_PIN
|
||||
int "uart1 TXD pin number"
|
||||
default 19
|
||||
config BSP_UART1_RXD_PIN
|
||||
int "uart1 RXD pin number"
|
||||
default 18
|
||||
config BSP_UART1_RTS_PIN
|
||||
int "uart1 RTS pin number (-1 for not used)"
|
||||
default -1
|
||||
config BSP_UART1_CTS_PIN
|
||||
int "uart1 CTS pin number (-1 for not used)"
|
||||
default -1
|
||||
endif
|
||||
menuconfig BSP_USING_UART2
|
||||
bool "Enable UART2"
|
||||
default n
|
||||
if BSP_USING_UART2
|
||||
config BSP_UART2_TXD_PIN
|
||||
int "uart2 TXD pin number"
|
||||
default 20
|
||||
config BSP_UART2_RXD_PIN
|
||||
int "uart2 RXD pin number"
|
||||
default 21
|
||||
config BSP_UART2_RTS_PIN
|
||||
int "uart2 RTS pin number (-1 for not used)"
|
||||
default -1
|
||||
config BSP_UART2_CTS_PIN
|
||||
int "uart2 CTS pin number (-1 for not used)"
|
||||
default -1
|
||||
endif
|
||||
menuconfig BSP_USING_UART3
|
||||
bool "Enable UART3"
|
||||
default n
|
||||
if BSP_USING_UART3
|
||||
config BSP_UART3_TXD_PIN
|
||||
int "uart3 TXD pin number"
|
||||
default 22
|
||||
config BSP_UART3_RXD_PIN
|
||||
int "uart3 RXD pin number"
|
||||
default 23
|
||||
config BSP_UART3_RTS_PIN
|
||||
int "uart3 RTS pin number (-1 for not used)"
|
||||
default -1
|
||||
config BSP_UART3_CTS_PIN
|
||||
int "uart3 CTS pin number (-1 for not used)"
|
||||
default -1
|
||||
endif
|
||||
|
||||
menuconfig BSP_USING_I2C1
|
||||
bool "Enable I2C1"
|
||||
select RT_USING_I2C
|
||||
default n
|
||||
if BSP_USING_I2C11
|
||||
config BSP_I2C1_SDA_PIN
|
||||
int "I2C1 sda pin number"
|
||||
default 15
|
||||
config BSP_I2C1_CLK_PIN
|
||||
int "I2C1 clk pin number"
|
||||
default 17
|
||||
endif
|
||||
|
||||
menuconfig BSP_USING_SPI1
|
||||
bool "Enable SPI1"
|
||||
select RT_USING_SPI
|
||||
default n
|
||||
if BSP_USING_SPI1
|
||||
config BSP_SPI1_CLK_PIN
|
||||
int "spi1 clk pin number"
|
||||
default 9
|
||||
config BSP_SPI1_D0_PIN
|
||||
int "spi1 d0 pin number"
|
||||
default 11
|
||||
config BSP_SPI1_D1_PIN
|
||||
int "spi1 d1 pin number"
|
||||
default 10
|
||||
menuconfig BSP_SPI1_USING_SS0
|
||||
bool "SPI1 Enable SS0(spi10 dev)"
|
||||
default n
|
||||
if BSP_SPI1_USING_SS0
|
||||
config BSP_SPI1_SS0_PIN
|
||||
int "spi1 ss0 pin number"
|
||||
default 12
|
||||
endif
|
||||
menuconfig BSP_SPI1_USING_SS1
|
||||
bool "SPI1 Enable SS1(spi11 dev)"
|
||||
default n
|
||||
if BSP_SPI1_USING_SS1
|
||||
config BSP_SPI1_SS1_PIN
|
||||
int "spi1 ss1 pin number"
|
||||
default 8
|
||||
endif
|
||||
menuconfig BSP_SPI1_USING_SS2
|
||||
bool "SPI1 Enable SS2(spi12 dev)"
|
||||
default n
|
||||
if BSP_SPI1_USING_SS2
|
||||
config BSP_SPI1_SS2_PIN
|
||||
int "spi1 ss2 pin number"
|
||||
default 26
|
||||
endif
|
||||
menuconfig BSP_SPI1_USING_SS3
|
||||
bool "SPI1 Enable SS3(spi13 dev)"
|
||||
default n
|
||||
if BSP_SPI1_USING_SS3
|
||||
config BSP_SPI1_SS3_PIN
|
||||
int "spi1 ss3 pin number"
|
||||
default 27
|
||||
endif
|
||||
endif
|
||||
menuconfig BSP_USING_SOFT_SPI
|
||||
bool "Enable SOFT SIMULATION SPI"
|
||||
default n
|
||||
if BSP_USING_SOFT_SPI
|
||||
config BSP_SOFT_SPI_CLK_PIN
|
||||
int "soft spi clk pin number"
|
||||
default 26
|
||||
config BSP_SOFT_SPI_MOSI_PIN
|
||||
int "soft spi MOSI pin number"
|
||||
default 27
|
||||
config BSP_SOFT_SPI_MISO_PIN
|
||||
int "soft spi MISO pin number"
|
||||
default 25
|
||||
menuconfig RT_USING_SOFT_SPI_CS0
|
||||
bool "SOFT SPI Enable CS0(soft spi0 dev)"
|
||||
default y
|
||||
if RT_USING_SOFT_SPI_CS0
|
||||
config RT_USING_SOFT_SPI_CS0_PIN
|
||||
int "SOFT SPI Enable CS0"
|
||||
default 28
|
||||
endif
|
||||
endif
|
||||
|
||||
|
||||
|
||||
endmenu
|
||||
|
||||
menu "Onboard Peripheral Drivers"
|
||||
menuconfig BSP_USING_LCD
|
||||
bool "Enable LCD on SPI0"
|
||||
default n
|
||||
if BSP_USING_LCD
|
||||
config BSP_LCD_CS_PIN
|
||||
int "CS pin number of 8080 interface"
|
||||
default 37
|
||||
config BSP_LCD_WR_PIN
|
||||
int "WR pin number of 8080 interface"
|
||||
default 38
|
||||
config BSP_LCD_DC_PIN
|
||||
int "DC pin number of 8080 interface"
|
||||
default 39
|
||||
config BSP_LCD_RST_PIN
|
||||
int "RESET pin number of 8080 interface (-1 for not used)"
|
||||
default 36
|
||||
config BSP_LCD_BACKLIGHT_PIN
|
||||
int "Backlight control pin number (-1 for not used)"
|
||||
default -1
|
||||
choice
|
||||
prompt "backlight active polarity"
|
||||
default BSP_LCD_BACKLIGHT_ACTIVE_LOW
|
||||
|
||||
config BSP_LCD_BACKLIGHT_ACTIVE_LOW
|
||||
bool "lcd backlight on low level"
|
||||
config BSP_LCD_BACKLIGHT_ACTIVE_HIGH
|
||||
bool "lcd_backlight on high level"
|
||||
endchoice
|
||||
|
||||
config BSP_LCD_CLK_FREQ
|
||||
int "Lcd max clk frequency"
|
||||
default 15000000
|
||||
|
||||
choice
|
||||
prompt "lcd scan direction"
|
||||
default BSP_BOARD_KD233
|
||||
|
||||
config BSP_BOARD_KD233
|
||||
bool "board_kd233 lcd scan: DIR_YX_RLUD"
|
||||
|
||||
config BSP_BOARD_K210_OPENMV_TEST
|
||||
bool "board_k210_openmv lcd scan: DIR_YX_LRUD"
|
||||
|
||||
config BSP_BOARD_USER
|
||||
bool "board_user: user defined."
|
||||
endchoice
|
||||
|
||||
config BSP_LCD_X_MAX
|
||||
int "LCD Height"
|
||||
default 320
|
||||
config BSP_LCD_Y_MAX
|
||||
int "LCD Width"
|
||||
default 320
|
||||
endif
|
||||
|
||||
menuconfig BSP_USING_DVP
|
||||
bool "Enable DVP(camera)"
|
||||
default n
|
||||
if BSP_USING_DVP
|
||||
comment "The default pin assignment is based on the Maix Duino K210 development board"
|
||||
config BSP_DVP_SCCB_SDA_PIN
|
||||
int "SCCB SDA pin number for camera"
|
||||
default 47
|
||||
config BSP_DVP_SCCB_SCLK_PIN
|
||||
int "SCCB SCLK pin number for camera"
|
||||
default 46
|
||||
config BSP_DVP_CMOS_RST_PIN
|
||||
int "CMOS RST pin number for camera"
|
||||
default 40
|
||||
config BSP_DVP_CMOS_VSYNC_PIN
|
||||
int "CMOS VSYNC pin number for camera"
|
||||
default 45
|
||||
config BSP_DVP_CMOS_PWDN_PIN
|
||||
int "CMOS PWDN pin number for camera"
|
||||
default 41
|
||||
config BSP_DVP_CMOS_XCLK_PIN
|
||||
int "CMOS XCLK pin number for camera"
|
||||
default 42
|
||||
config BSP_DVP_CMOS_PCLK_PIN
|
||||
int "CMOS PCLK pin number for camera"
|
||||
default 43
|
||||
config BSP_DVP_CMOS_HREF_PIN
|
||||
int "CMOS HREF pin number for camera"
|
||||
default 44
|
||||
endif
|
||||
|
||||
config BSP_USING_SDCARD
|
||||
bool "Enable SDCARD (soft_spi_bus)"
|
||||
select BSP_USING_SOFT_SPI
|
||||
select RT_USING_SPI_MSD
|
||||
select RT_USING_DFS
|
||||
select RT_USING_DFS_ELMFAT
|
||||
select RT_USING_SOFT_SPI_CS0_PIN
|
||||
default n
|
||||
|
||||
|
||||
endmenu
|
||||
|
||||
endmenu
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
import os
|
||||
import rtconfig
|
||||
from building import *
|
||||
|
||||
cwd = GetCurrentDir()
|
||||
drv_path = cwd+"/../../../rt-thread/bsp/k210/driver/"
|
||||
src = [
|
||||
'board.c',
|
||||
'heap.c',
|
||||
drv_path + 'drv_uart.c',
|
||||
'drv_interrupt.c',
|
||||
'drv_io_config.c',
|
||||
'dmalock.c'
|
||||
]
|
||||
CPPPATH = [cwd,drv_path]
|
||||
|
||||
if GetDepend('RT_USING_PIN'):
|
||||
src += ['drv_gpio.c']
|
||||
if GetDepend('RT_USING_HWTIMER'):
|
||||
src += [drv_path + 'drv_hw_timer.c']
|
||||
if GetDepend('RT_USING_I2C'):
|
||||
src += [drv_path + 'drv_i2c.c']
|
||||
if GetDepend('RT_USING_SPI'):
|
||||
src += ['drv_spi.c']
|
||||
if GetDepend('RT_USING_PWM'):
|
||||
src += [drv_path + 'drv_pwm.c']
|
||||
if GetDepend('RT_USING_WDT'):
|
||||
src += [drv_path + 'drv_wdt.c']
|
||||
if GetDepend('BSP_USING_DVP'):
|
||||
src += ['drv_dvp.c']
|
||||
if GetDepend('BSP_USING_LCD'):
|
||||
src += ['drv_lcd.c']
|
||||
src += ['drv_mpylcd.c']
|
||||
if GetDepend('BSP_USING_SOFT_SPI'):
|
||||
src +=['drv_soft_spi.c']
|
||||
if GetDepend('BSP_USING_SDCARD'):
|
||||
src += ['sdcard_port.c']
|
||||
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH)
|
||||
|
||||
Return('group')
|
||||
|
|
@ -0,0 +1,144 @@
|
|||
/*
|
||||
* Copyright (c) 2006-2018, RT-Thread Development Team
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
*/
|
||||
|
||||
#include <rthw.h>
|
||||
#include <rtthread.h>
|
||||
|
||||
#include "board.h"
|
||||
#include "tick.h"
|
||||
|
||||
#include "drv_uart.h"
|
||||
|
||||
#include "encoding.h"
|
||||
#include "fpioa.h"
|
||||
#include "dmac.h"
|
||||
#include "dmalock.h"
|
||||
|
||||
void init_bss(void)
|
||||
{
|
||||
unsigned int *dst;
|
||||
|
||||
dst = &__bss_start;
|
||||
while (dst < &__bss_end)
|
||||
{
|
||||
*dst++ = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void primary_cpu_entry(void)
|
||||
{
|
||||
extern void entry(void);
|
||||
|
||||
/* disable global interrupt */
|
||||
init_bss();
|
||||
rt_hw_interrupt_disable();
|
||||
entry();
|
||||
}
|
||||
|
||||
#include <clint.h>
|
||||
#include <sysctl.h>
|
||||
|
||||
int freq(void)
|
||||
{
|
||||
rt_uint64_t value = 0;
|
||||
|
||||
value = sysctl_clock_get_freq(SYSCTL_CLOCK_PLL0);
|
||||
rt_kprintf("PLL0: %d\n", value);
|
||||
value = sysctl_clock_get_freq(SYSCTL_CLOCK_PLL1);
|
||||
rt_kprintf("PLL1: %d\n", value);
|
||||
value = sysctl_clock_get_freq(SYSCTL_CLOCK_PLL2);
|
||||
rt_kprintf("PLL2: %d\n", value);
|
||||
value = sysctl_clock_get_freq(SYSCTL_CLOCK_CPU);
|
||||
rt_kprintf("CPU : %d\n", value);
|
||||
value = sysctl_clock_get_freq(SYSCTL_CLOCK_APB0);
|
||||
rt_kprintf("APB0: %d\n", value);
|
||||
value = sysctl_clock_get_freq(SYSCTL_CLOCK_APB1);
|
||||
rt_kprintf("APB1: %d\n", value);
|
||||
value = sysctl_clock_get_freq(SYSCTL_CLOCK_APB2);
|
||||
rt_kprintf("APB2: %d\n", value);
|
||||
value = sysctl_clock_get_freq(SYSCTL_CLOCK_HCLK);
|
||||
rt_kprintf("HCLK: %d\n", value);
|
||||
|
||||
value = clint_get_time();
|
||||
rt_kprintf("mtime: %d\n", value);
|
||||
|
||||
return 0;
|
||||
}
|
||||
MSH_CMD_EXPORT(freq, show freq info);
|
||||
|
||||
#ifdef RT_USING_SMP
|
||||
extern int rt_hw_clint_ipi_enable(void);
|
||||
#endif
|
||||
|
||||
extern int io_config_init(void);
|
||||
|
||||
void rt_hw_board_init(void)
|
||||
{
|
||||
sysctl_pll_set_freq(SYSCTL_PLL0, 800000000UL);
|
||||
sysctl_pll_set_freq(SYSCTL_PLL1, 400000000UL);
|
||||
sysctl_pll_set_freq(SYSCTL_PLL2, 45158400UL);
|
||||
sysctl_clock_set_threshold(SYSCTL_THRESHOLD_APB1, 2);
|
||||
/* Init FPIOA */
|
||||
fpioa_init();
|
||||
|
||||
io_config_init();
|
||||
|
||||
/* Dmac init */
|
||||
dmac_init();
|
||||
dmalock_init();
|
||||
|
||||
/* initalize interrupt */
|
||||
rt_hw_interrupt_init();
|
||||
/* initialize hardware interrupt */
|
||||
rt_hw_uart_init();
|
||||
|
||||
rt_hw_tick_init();
|
||||
|
||||
#ifdef RT_USING_SMP
|
||||
rt_hw_clint_ipi_enable();
|
||||
#endif
|
||||
|
||||
#ifdef RT_USING_CONSOLE
|
||||
/* set console device */
|
||||
rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
|
||||
#endif /* RT_USING_CONSOLE */
|
||||
|
||||
#ifdef RT_USING_HEAP
|
||||
rt_kprintf("heap: [0x%08x - 0x%08x]\n", (rt_ubase_t) RT_HW_HEAP_BEGIN, (rt_ubase_t) RT_HW_HEAP_END);
|
||||
/* initialize memory system */
|
||||
rt_system_heap_init(RT_HW_HEAP_BEGIN, RT_HW_HEAP_END);
|
||||
#endif
|
||||
|
||||
#ifdef RT_USING_COMPONENTS_INIT
|
||||
rt_components_board_init();
|
||||
#endif
|
||||
}
|
||||
void rt_hw_cpu_reset(void)
|
||||
{
|
||||
sysctl->soft_reset.soft_reset = 1;
|
||||
while(1);
|
||||
}
|
||||
|
||||
MSH_CMD_EXPORT_ALIAS(rt_hw_cpu_reset, reboot, reset machine);
|
||||
|
||||
/**
|
||||
* This function will delay for some us.
|
||||
*
|
||||
* @param us the delay time of us
|
||||
*/
|
||||
void rt_hw_us_delay(rt_uint32_t usec)
|
||||
{
|
||||
rt_uint32_t cycle = read_cycle();
|
||||
rt_uint32_t nop_all = usec * sysctl_clock_get_freq(SYSCTL_CLOCK_CPU) / 1000000UL;
|
||||
while (1)
|
||||
{
|
||||
if(read_cycle() - cycle >= nop_all)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
/*
|
||||
* Copyright (c) 2006-2018, RT-Thread Development Team
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
* 2017-5-30 Bernard the first version
|
||||
*/
|
||||
|
||||
#ifndef BOARD_H__
|
||||
#define BOARD_H__
|
||||
|
||||
#include "fpioa.h"
|
||||
#include "platform.h"
|
||||
#include <rtconfig.h>
|
||||
|
||||
extern unsigned int __bss_start;
|
||||
extern unsigned int __bss_end;
|
||||
|
||||
#define RT_HW_HEAP_BEGIN (void*)&__bss_end
|
||||
#define RT_HW_HEAP_END (void*)(0x80000000 + 6 * 1024 * 1024)
|
||||
|
||||
void rt_hw_board_init(void);
|
||||
|
||||
#endif
|
||||