mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-11-07 08:39:40 +08:00
修复RTC问题,增加GCC工具链
This commit is contained in:
1 parent
160d448660
commit
208eb0a385
36 files changed
+13865
-10471
No files matched your search
+131
-61
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,40 @@
|
||||
[BREAKPOINTS]
|
||||
ForceImpTypeAny = 0
|
||||
ShowInfoWin = 1
|
||||
EnableFlashBP = 2
|
||||
BPDuringExecution = 0
|
||||
[CFI]
|
||||
CFISize = 0x00
|
||||
CFIAddr = 0x00
|
||||
[CPU]
|
||||
MonModeVTableAddr = 0xFFFFFFFF
|
||||
MonModeDebug = 0
|
||||
MaxNumAPs = 0
|
||||
LowPowerHandlingMode = 0
|
||||
OverrideMemMap = 0
|
||||
AllowSimulation = 1
|
||||
ScriptFile=""
|
||||
[FLASH]
|
||||
EraseType = 0x00
|
||||
CacheExcludeSize = 0x00
|
||||
CacheExcludeAddr = 0x00
|
||||
MinNumBytesFlashDL = 0
|
||||
SkipProgOnCRCMatch = 1
|
||||
VerifyDownload = 1
|
||||
AllowCaching = 1
|
||||
EnableFlashDL = 2
|
||||
Override = 1
|
||||
Device="Cortex-M4"
|
||||
[GENERAL]
|
||||
WorkRAMSize = 0x00
|
||||
WorkRAMAddr = 0x00
|
||||
RAMUsageLimit = 0x00
|
||||
[SWO]
|
||||
SWOLogFile=""
|
||||
[MEM]
|
||||
RdOverrideOrMask = 0x00
|
||||
RdOverrideAndMask = 0xFFFFFFFF
|
||||
RdOverrideAddr = 0xFFFFFFFF
|
||||
WrOverrideOrMask = 0x00
|
||||
WrOverrideAndMask = 0xFFFFFFFF
|
||||
WrOverrideAddr = 0xFFFFFFFF
|
||||
@@ -119,7 +119,7 @@
|
||||
|
||||
- 使用 Jlink 连接开发板到 PC (需要 Jlink 驱动)
|
||||
|
||||
将串口 0 引脚为:`[PA2/PA3]`和 USB 转串口模块 P2 相连,串口配置方式为115200-N-8-1。
|
||||
将串口 1 引脚为:`[PC2/PC3]`和 USB 转串口模块 J11 相连,串口配置方式为115200-N-8-1。
|
||||
|
||||
当使用 [env工具](https://www.rt-thread.org/page/download.html) 正确编译产生出rtthread.bin映像文件后,可以使用 ISP 的方式来烧写到设备中。
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
#include <rtthread.h>
|
||||
#include <rtdevice.h>
|
||||
|
||||
#define LED_PIN 21
|
||||
#define LED_PIN 32
|
||||
|
||||
int main(void)
|
||||
{
|
||||
@@ -29,7 +29,7 @@ int main(void)
|
||||
}
|
||||
|
||||
// #ifdef RT_USING_PIN
|
||||
// #define KEY1_PIN 25
|
||||
// #define KEY1_PIN 31
|
||||
// void key1_cb(void *args)
|
||||
// {
|
||||
// rt_kprintf("key1 irq!\n");
|
||||
@@ -46,7 +46,7 @@ int main(void)
|
||||
// #endif
|
||||
|
||||
#ifdef RT_USING_ADC
|
||||
#define ADC_DEV_NAME "adc0"
|
||||
#define ADC_DEV_NAME "adc1"
|
||||
#define ADC_DEV_CHANNEL 0
|
||||
#define REFER_VOLTAGE 330
|
||||
#define CONVERT_BITS (1 << 12)
|
||||
@@ -64,16 +64,15 @@ static int adc_vol_sample(int argc, char *argv[])
|
||||
return RT_ERROR;
|
||||
}
|
||||
|
||||
while (1)
|
||||
{
|
||||
ret = rt_adc_enable(adc_dev, ADC_DEV_CHANNEL);
|
||||
value = rt_adc_read(adc_dev, ADC_DEV_CHANNEL);
|
||||
rt_kprintf("the value is :%d,", value);
|
||||
vol = value * REFER_VOLTAGE / CONVERT_BITS;
|
||||
rt_kprintf("the voltage is :%d.%02d \n", vol / 100, vol % 100);
|
||||
rt_thread_mdelay(500);
|
||||
ret = rt_adc_disable(adc_dev, ADC_DEV_CHANNEL);
|
||||
}
|
||||
ret = rt_adc_enable(adc_dev, ADC_DEV_CHANNEL);
|
||||
|
||||
value = rt_adc_read(adc_dev, ADC_DEV_CHANNEL);
|
||||
rt_kprintf("the value is :%d,", value);
|
||||
|
||||
vol = value * REFER_VOLTAGE / CONVERT_BITS;
|
||||
rt_kprintf("the voltage is :%d.%02d \n", vol / 100, vol % 100);
|
||||
|
||||
ret = rt_adc_disable(adc_dev, ADC_DEV_CHANNEL);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -143,17 +142,17 @@ MSH_CMD_EXPORT(hwtimer_sample, hwtimer sample);
|
||||
#endif
|
||||
|
||||
#ifdef RT_USING_PWM
|
||||
#define PWM_DEV_NAME "pwm0" /* PWM???? */
|
||||
#define PWM_DEV_CHANNEL 0 /* PWM?? */
|
||||
#define PWM_DEV_NAME "pwm0" /* PWM设备名称 */
|
||||
#define PWM_DEV_CHANNEL 0 /* PWM通道 */
|
||||
|
||||
struct rt_device_pwm *pwm_dev; /* PWM???? */
|
||||
struct rt_device_pwm *pwm_dev; /* PWM设备句柄 */
|
||||
|
||||
static int pwm_sample(int argc, char *argv[])
|
||||
{
|
||||
rt_uint32_t period, pulse;
|
||||
|
||||
period = 500000; /* ???0.5ms,?????ns */
|
||||
pulse = 250000; /* PWM?????,?????ns */
|
||||
period = 500000; /* 周期为0.5ms,单位为纳秒ns */
|
||||
pulse = 250000; /* PWM脉冲宽度值,单位为纳秒ns */
|
||||
|
||||
pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME);
|
||||
if (pwm_dev == RT_NULL)
|
||||
@@ -170,26 +169,27 @@ MSH_CMD_EXPORT(pwm_sample, pwm sample);
|
||||
#endif
|
||||
|
||||
#ifdef RT_USING_RTC
|
||||
#include <time.h>
|
||||
static int rtc_sample(int argc, char *argv[])
|
||||
{
|
||||
rt_err_t ret = RT_EOK;
|
||||
time_t now;
|
||||
|
||||
ret = set_date(2020, 6, 15);
|
||||
ret = set_date(2020, 2, 28);
|
||||
if (ret != RT_EOK)
|
||||
{
|
||||
rt_kprintf("set RTC date failed\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = set_time(11, 15, 50);
|
||||
ret = set_time(23, 59, 55);
|
||||
if (ret != RT_EOK)
|
||||
{
|
||||
rt_kprintf("set RTC time failed\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
rt_thread_mdelay(3000);
|
||||
//rt_thread_mdelay(3000);
|
||||
now = time(RT_NULL);
|
||||
rt_kprintf("%s\n", ctime(&now));
|
||||
|
||||
@@ -205,7 +205,7 @@ static rt_device_t wdg_dev;
|
||||
|
||||
static void idle_hook(void)
|
||||
{
|
||||
rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_KEEPALIVE, NULL);
|
||||
rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_KEEPALIVE, RT_NULL);
|
||||
rt_kprintf("feed the dog!\n ");
|
||||
}
|
||||
|
||||
@@ -264,7 +264,7 @@ MSH_CMD_EXPORT(wdt_sample, wdt sample);
|
||||
|
||||
static int rt_hw_spi_flash_init(void)
|
||||
{
|
||||
rt_hw_spi_device_attach("spi0", "spi00", GPIOA, PIN12);
|
||||
rt_hw_spi_device_attach("spi0", "spi00", GPIOP, PIN22);
|
||||
|
||||
if (RT_NULL == rt_sfud_flash_probe(W25Q_FLASH_NAME, W25Q_SPI_DEVICE_NAME))
|
||||
{
|
||||
@@ -273,7 +273,6 @@ static int rt_hw_spi_flash_init(void)
|
||||
|
||||
return RT_EOK;
|
||||
}
|
||||
/* ???????? */
|
||||
INIT_COMPONENT_EXPORT(rt_hw_spi_flash_init);
|
||||
|
||||
static void spi_w25q_sample(int argc, char *argv[])
|
||||
@@ -292,12 +291,12 @@ static void spi_w25q_sample(int argc, char *argv[])
|
||||
rt_strncpy(name, W25Q_SPI_DEVICE_NAME, RT_NAME_MAX);
|
||||
}
|
||||
|
||||
/* ?? spi ???????? */
|
||||
/* 查找 spi 设备获取设备句柄 */
|
||||
spi_dev_w25q = (struct rt_spi_device *)rt_device_find(name);
|
||||
struct rt_spi_configuration cfg;
|
||||
cfg.data_width = 8;
|
||||
cfg.mode = RT_SPI_MASTER | RT_SPI_MODE_0 | RT_SPI_MSB;
|
||||
cfg.max_hz = 20 * 1000 * 1000; /* 20M */
|
||||
cfg.max_hz = 30 * 1000 * 1000; /* 20M */
|
||||
|
||||
rt_spi_configure(spi_dev_w25q, &cfg);
|
||||
if (!spi_dev_w25q)
|
||||
@@ -306,11 +305,11 @@ static void spi_w25q_sample(int argc, char *argv[])
|
||||
}
|
||||
else
|
||||
{
|
||||
/* ??1:?? rt_spi_send_then_recv()??????ID */
|
||||
/* 方式1:使用 rt_spi_send_then_recv()发送命令读取ID */
|
||||
rt_spi_send_then_recv(spi_dev_w25q, &w25x_read_id, 1, id, 5);
|
||||
rt_kprintf("use rt_spi_send_then_recv() read w25q ID is:%x%x\n", id[3], id[4]);
|
||||
|
||||
/* ??2:?? rt_spi_transfer_message()??????ID */
|
||||
/* 方式2:使用 rt_spi_transfer_message()发送命令读取ID */
|
||||
struct rt_spi_message msg1, msg2;
|
||||
|
||||
msg1.send_buf = &w25x_read_id;
|
||||
@@ -352,7 +351,6 @@ static void spi_flash_elmfat_sample(void)
|
||||
|
||||
rt_kprintf("Write string '%s' to /user/test.txt.\n", str);
|
||||
|
||||
/* ????????????,??????????????*/
|
||||
fd = open("/user/test.txt", O_WRONLY | O_CREAT);
|
||||
if (fd >= 0)
|
||||
{
|
||||
@@ -362,7 +360,6 @@ static void spi_flash_elmfat_sample(void)
|
||||
close(fd);
|
||||
}
|
||||
|
||||
/* ????????? */
|
||||
fd = open("/user/test.txt", O_RDONLY);
|
||||
if (fd >= 0)
|
||||
{
|
||||
@@ -397,7 +394,7 @@ MSH_CMD_EXPORT(spi_w25q_sample, spi w25q sample);
|
||||
//{
|
||||
// int fd, size;
|
||||
// struct statfs elm_stat;
|
||||
// char str[] = "elmfat mount to sdcard.\r\n", buf[80];
|
||||
// char str[] = "elmfat mount to sdcard.", buf[80];
|
||||
|
||||
// if (dfs_mkfs("elm", SDCARD_NAME) == 0)
|
||||
// rt_kprintf("make elmfat filesystem success.\n");
|
||||
|
||||
@@ -245,11 +245,11 @@ menu "On-chip Peripheral Drivers"
|
||||
select RT_USING_SPI
|
||||
if BSP_USING_SPI
|
||||
config BSP_USING_SPI0
|
||||
bool "Enable SPI0 BUS(CS/A12,MISO/A11,MOSI/A10,CLK/A9)"
|
||||
bool "Enable SPI0 BUS(CS/P22,MISO/P19,MOSI/P18,CLK/P23)"
|
||||
default n
|
||||
|
||||
config BSP_USING_SPI1
|
||||
bool "Enable SPI1 BUS(CS/C4,MISO/C5,MOSI/C6,CLK/C7)"
|
||||
bool "Enable SPI1 BUS(CS/B6,MISO/B3,MOSI/B2,CLK/B1)"
|
||||
default n
|
||||
endif
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ static void bsp_clock_config(void)
|
||||
SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND);
|
||||
SysTick->CTRL |= 0x00000004UL;
|
||||
}
|
||||
|
||||
void SysTick_Handler(void)
|
||||
{
|
||||
/* enter interrupt */
|
||||
@@ -28,6 +29,41 @@ void SysTick_Handler(void)
|
||||
rt_interrupt_leave();
|
||||
}
|
||||
|
||||
/**
|
||||
* This function will delay for some us.
|
||||
*
|
||||
* @param us the delay time of us
|
||||
*/
|
||||
void rt_hw_us_delay(rt_uint32_t us)
|
||||
{
|
||||
rt_uint32_t ticks;
|
||||
rt_uint32_t told, tnow, tcnt = 0;
|
||||
rt_uint32_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 rt_hw_board_init()
|
||||
{
|
||||
bsp_clock_config();
|
||||
|
||||
@@ -21,11 +21,6 @@ struct swm_hwcrypto_device
|
||||
|
||||
#ifdef BSP_USING_CRC
|
||||
|
||||
struct hash_ctx_des
|
||||
{
|
||||
struct swm_crc_cfg contex;
|
||||
};
|
||||
|
||||
static struct hwcrypto_crc_cfg crc_backup_cfg;
|
||||
|
||||
static rt_uint32_t _crc_update(struct hwcrypto_crc *ctx, const rt_uint8_t *in, rt_size_t length)
|
||||
@@ -108,6 +103,7 @@ static const struct hwcrypto_crc_ops crc_ops =
|
||||
{
|
||||
.update = _crc_update,
|
||||
};
|
||||
#endif /* BSP_USING_CRC */
|
||||
|
||||
static rt_err_t _crypto_create(struct rt_hwcrypto_ctx *ctx)
|
||||
{
|
||||
@@ -170,7 +166,7 @@ static rt_err_t _crypto_clone(struct rt_hwcrypto_ctx *des, const struct rt_hwcry
|
||||
case HWCRYPTO_TYPE_CRC:
|
||||
if (des->contex && src->contex)
|
||||
{
|
||||
rt_memcpy(des->contex, src->contex, sizeof(struct hash_ctx_des));
|
||||
rt_memcpy(des->contex, src->contex, sizeof(struct swm_crc_cfg));
|
||||
}
|
||||
break;
|
||||
#endif /* BSP_USING_CRC */
|
||||
@@ -226,5 +222,5 @@ int rt_hw_crypto_init(void)
|
||||
}
|
||||
INIT_BOARD_EXPORT(rt_hw_crypto_init);
|
||||
|
||||
#endif /* BSP_USING_WDT */
|
||||
#endif /* RT_USING_WDT */
|
||||
|
||||
#endif /* RT_USING_HWCRYPTO */
|
||||
@@ -475,6 +475,7 @@ static void rt_hw_pin_isr(GPIO_TypeDef *GPIOx)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GPIOA_Handler(void)
|
||||
{
|
||||
rt_interrupt_enter();
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
*/
|
||||
|
||||
#include "drv_rtc.h"
|
||||
#include <sys/time.h>
|
||||
|
||||
#ifdef RT_USING_RTC
|
||||
#ifdef BSP_USING_RTC
|
||||
@@ -18,8 +19,6 @@
|
||||
#define LOG_TAG "drv.rtc"
|
||||
#include <drv_log.h>
|
||||
|
||||
static struct rt_device rtc_device;
|
||||
|
||||
static uint32_t calcWeekDay(uint32_t year, uint32_t month, uint32_t date)
|
||||
{
|
||||
uint32_t i, cnt = 0;
|
||||
@@ -55,8 +54,8 @@ static time_t swm_get_rtc_time_stamp(void)
|
||||
tm_new.tm_min = get_datetime.Minute;
|
||||
tm_new.tm_hour = get_datetime.Hour;
|
||||
tm_new.tm_mday = get_datetime.Date;
|
||||
tm_new.tm_mon = get_datetime.Month - 1;
|
||||
tm_new.tm_year = get_datetime.Year - 1900;
|
||||
tm_new.tm_mon = get_datetime.Month;
|
||||
tm_new.tm_year = get_datetime.Year;
|
||||
|
||||
LOG_D("get rtc time.");
|
||||
return mktime(&tm_new);
|
||||
@@ -72,9 +71,9 @@ static rt_err_t swm_set_rtc_time_stamp(time_t time_stamp)
|
||||
set_datetime.Minute = p_tm->tm_min;
|
||||
set_datetime.Hour = p_tm->tm_hour;
|
||||
set_datetime.Date = p_tm->tm_mday;
|
||||
set_datetime.Month = p_tm->tm_mon + 1;
|
||||
set_datetime.Year = p_tm->tm_year + 1900;
|
||||
// datetime.Day = p_tm->tm_wday;
|
||||
set_datetime.Month = p_tm->tm_mon;
|
||||
set_datetime.Year = p_tm->tm_year;
|
||||
// set_datetime.Day = p_tm->tm_wday;
|
||||
|
||||
RTC_Stop(RTC);
|
||||
while (RTC->CFGABLE == 0)
|
||||
@@ -86,7 +85,7 @@ static rt_err_t swm_set_rtc_time_stamp(time_t time_stamp)
|
||||
RTC->MONDAY = (calcWeekDay(set_datetime.Year, set_datetime.Month, set_datetime.Date)
|
||||
<< RTC_MONDAY_DAY_Pos) |
|
||||
((set_datetime.Month) << RTC_MONDAY_MON_Pos);
|
||||
RTC->YEAR = set_datetime.Year - 1901;
|
||||
RTC->YEAR = set_datetime.Year;
|
||||
RTC->LOAD = 1 << RTC_LOAD_TIME_Pos;
|
||||
RTC_Start(RTC);
|
||||
|
||||
@@ -94,43 +93,7 @@ static rt_err_t swm_set_rtc_time_stamp(time_t time_stamp)
|
||||
return RT_EOK;
|
||||
}
|
||||
|
||||
static rt_err_t swm_rtc_control(rt_device_t rtc_device, int cmd, void *args)
|
||||
{
|
||||
rt_err_t result = RT_EOK;
|
||||
RT_ASSERT(rtc_device != RT_NULL);
|
||||
|
||||
switch (cmd)
|
||||
{
|
||||
case RT_DEVICE_CTRL_RTC_GET_TIME:
|
||||
*(rt_uint32_t *)args = swm_get_rtc_time_stamp();
|
||||
LOG_D("RTC: get rtc_time %x\n", *(rt_uint32_t *)args);
|
||||
break;
|
||||
case RT_DEVICE_CTRL_RTC_SET_TIME:
|
||||
if (swm_set_rtc_time_stamp(*(rt_uint32_t *)args))
|
||||
{
|
||||
result = -RT_ERROR;
|
||||
}
|
||||
LOG_D("RTC: set rtc_time %x\n", *(rt_uint32_t *)args);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
#ifdef RT_USING_DEVICE_OPS
|
||||
const static struct rt_device_ops swm_rtc_ops =
|
||||
{
|
||||
RT_NULL,
|
||||
RT_NULL,
|
||||
RT_NULL,
|
||||
RT_NULL,
|
||||
RT_NULL,
|
||||
swm_rtc_control};
|
||||
#endif
|
||||
|
||||
static void swm_rtc_init(void)
|
||||
static rt_err_t swm_rtc_init(void)
|
||||
{
|
||||
RTC_InitStructure rtc_initstruct;
|
||||
|
||||
@@ -144,37 +107,50 @@ static void swm_rtc_init(void)
|
||||
rtc_initstruct.MinuteIEn = 0;
|
||||
RTC_Init(RTC, &rtc_initstruct);
|
||||
RTC_Start(RTC);
|
||||
|
||||
return RT_EOK;
|
||||
}
|
||||
|
||||
static rt_err_t rt_hw_rtc_register(rt_device_t rtc_device, const char *name, rt_uint32_t flag)
|
||||
static rt_err_t swm_rtc_get_secs(void *args)
|
||||
{
|
||||
RT_ASSERT(rtc_device != RT_NULL);
|
||||
*(rt_uint32_t *)args = swm_get_rtc_time_stamp();
|
||||
LOG_D("RTC: get rtc_time %x\n", *(rt_uint32_t *)args);
|
||||
|
||||
swm_rtc_init();
|
||||
|
||||
#ifdef RT_USING_DEVICE_OPS
|
||||
rtc_device->ops = &swm_rtc_ops;
|
||||
#else
|
||||
rtc_device->init = RT_NULL;
|
||||
rtc_device->open = RT_NULL;
|
||||
rtc_device->close = RT_NULL;
|
||||
rtc_device->read = RT_NULL;
|
||||
rtc_device->write = RT_NULL;
|
||||
rtc_device->control = swm_rtc_control;
|
||||
#endif
|
||||
rtc_device->type = RT_Device_Class_RTC;
|
||||
rtc_device->rx_indicate = RT_NULL;
|
||||
rtc_device->tx_complete = RT_NULL;
|
||||
rtc_device->user_data = RT_NULL;
|
||||
|
||||
/* register a character device */
|
||||
return rt_device_register(rtc_device, name, flag);
|
||||
return RT_EOK;
|
||||
}
|
||||
|
||||
static rt_err_t swm_rtc_set_secs(void *args)
|
||||
{
|
||||
rt_err_t result = RT_EOK;
|
||||
|
||||
if (swm_set_rtc_time_stamp(*(rt_uint32_t *)args))
|
||||
{
|
||||
result = -RT_ERROR;
|
||||
}
|
||||
LOG_D("RTC: set rtc_time %x\n", *(rt_uint32_t *)args);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static const struct rt_rtc_ops swm_rtc_ops =
|
||||
{
|
||||
swm_rtc_init,
|
||||
swm_rtc_get_secs,
|
||||
swm_rtc_set_secs,
|
||||
RT_NULL,
|
||||
RT_NULL,
|
||||
RT_NULL,
|
||||
RT_NULL,
|
||||
};
|
||||
|
||||
static rt_rtc_dev_t swm_rtc_device;
|
||||
|
||||
int rt_hw_rtc_init(void)
|
||||
{
|
||||
rt_err_t result;
|
||||
result = rt_hw_rtc_register(&rtc_device, "rtc", RT_DEVICE_FLAG_RDWR);
|
||||
|
||||
swm_rtc_device.ops = &swm_rtc_ops;
|
||||
result = rt_hw_rtc_register(&swm_rtc_device, "rtc", RT_DEVICE_FLAG_RDWR,RT_NULL);
|
||||
if (result != RT_EOK)
|
||||
{
|
||||
LOG_E("rtc register err code: %d", result);
|
||||
|
||||
@@ -47,7 +47,7 @@ static void rthw_sdio_wait_completed(struct rthw_sdio *sdio)
|
||||
SDIO_TypeDef *hw_sdio = sdio->sdio_des.hw_sdio;
|
||||
|
||||
if (rt_event_recv(&sdio->event, 0xffffffff, RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR,
|
||||
rt_tick_from_millisecond(5000), &status) != RT_EOK)
|
||||
rt_tick_from_millisecond(1000), &status) != RT_EOK)
|
||||
{
|
||||
LOG_E("wait completed timeout");
|
||||
cmd->err = -RT_ETIMEOUT;
|
||||
|
||||
@@ -279,15 +279,15 @@ int rt_hw_spi_init(void)
|
||||
rt_err_t result;
|
||||
|
||||
#ifdef BSP_USING_SPI0
|
||||
PORT_Init(PORTA, PIN9, FUNMUX1_SPI0_SCLK, 0);
|
||||
PORT_Init(PORTA, PIN10, FUNMUX0_SPI0_MOSI, 0);
|
||||
PORT_Init(PORTA, PIN11, FUNMUX1_SPI0_MISO, 1);
|
||||
PORT_Init(PORTP, PIN23, FUNMUX1_SPI0_SCLK, 0);
|
||||
PORT_Init(PORTP, PIN18, FUNMUX0_SPI0_MOSI, 0);
|
||||
PORT_Init(PORTP, PIN19, FUNMUX1_SPI0_MISO, 1);
|
||||
#endif //BSP_USING_SPI0
|
||||
|
||||
#ifdef BSP_USING_SPI1
|
||||
PORT_Init(PORTC, PIN7, FUNMUX1_SPI1_SCLK, 0);
|
||||
PORT_Init(PORTC, PIN6, FUNMUX0_SPI1_MOSI, 0);
|
||||
PORT_Init(PORTC, PIN5, FUNMUX1_SPI1_MISO, 1);
|
||||
PORT_Init(PORTB, PIN1, FUNMUX1_SPI1_SCLK, 0);
|
||||
PORT_Init(PORTB, PIN2, FUNMUX0_SPI1_MOSI, 0);
|
||||
PORT_Init(PORTB, PIN3, FUNMUX1_SPI1_MISO, 1);
|
||||
#endif //BSP_USING_SPI1
|
||||
for (int i = 0; i < sizeof(spi_cfg) / sizeof(spi_cfg[0]); i++)
|
||||
{
|
||||
|
||||
@@ -1,71 +1,137 @@
|
||||
/* Entry Point */
|
||||
ENTRY(Reset_Handler)
|
||||
|
||||
/* Specify the memory areas */
|
||||
/* Program Entry, set to mark it as "used" and avoid gc */
|
||||
MEMORY
|
||||
{
|
||||
ROM (arx) : ORIGIN = 0x00000000, LENGTH = 0x00080000 /* 512k */
|
||||
RAM (arw) : ORIGIN = 0x20000000, LENGTH = 0x00020000 /* 128k */
|
||||
CODE (rx) : ORIGIN = 0x00000000, LENGTH = 512k /* 1024KB flash */
|
||||
DATA (rw) : ORIGIN = 0x20000000, LENGTH = 128k /* 128K sram */
|
||||
}
|
||||
ENTRY(Reset_Handler)
|
||||
_system_stack_size = 0x200;
|
||||
|
||||
/* Define output sections */
|
||||
SECTIONS
|
||||
{
|
||||
. = ORIGIN(ROM);
|
||||
.text :
|
||||
{
|
||||
KEEP(*(.isr_vector))
|
||||
|
||||
*(.text)
|
||||
*(.text*)
|
||||
. = ALIGN(4);
|
||||
_stext = .;
|
||||
KEEP(*(.isr_vector)) /* Startup code */
|
||||
. = ALIGN(4);
|
||||
*(.text) /* remaining code */
|
||||
*(.text.*) /* remaining code */
|
||||
*(.rodata) /* read-only data (constants) */
|
||||
*(.rodata*)
|
||||
} > ROM
|
||||
*(.glue_7)
|
||||
*(.glue_7t)
|
||||
*(.gnu.linkonce.t*)
|
||||
|
||||
. = ALIGN(4);
|
||||
__data_load__ = LOADADDR(.data);
|
||||
/* section information for finsh shell */
|
||||
. = ALIGN(4);
|
||||
__fsymtab_start = .;
|
||||
KEEP(*(FSymTab))
|
||||
__fsymtab_end = .;
|
||||
. = ALIGN(4);
|
||||
__vsymtab_start = .;
|
||||
KEEP(*(VSymTab))
|
||||
__vsymtab_end = .;
|
||||
. = ALIGN(4);
|
||||
|
||||
. = ALIGN(4);
|
||||
.data :
|
||||
{
|
||||
__data_start__ = .;
|
||||
|
||||
*(.data)
|
||||
*(.data*)
|
||||
/* section information for initial. */
|
||||
. = ALIGN(4);
|
||||
__rt_init_start = .;
|
||||
KEEP(*(SORT(.rti_fn*)))
|
||||
__rt_init_end = .;
|
||||
. = ALIGN(4);
|
||||
|
||||
. = ALIGN(4);
|
||||
__data_end__ = .;
|
||||
} > RAM AT> ROM
|
||||
_etext = .;
|
||||
} > CODE = 0
|
||||
|
||||
. = ALIGN(4);
|
||||
/* .ARM.exidx is sorted, so has to go in its own output section. */
|
||||
__exidx_start = .;
|
||||
.ARM.exidx :
|
||||
{
|
||||
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
|
||||
|
||||
/* This is used by the startup in order to initialize the .data secion */
|
||||
_sidata = .;
|
||||
} > CODE
|
||||
__exidx_end = .;
|
||||
|
||||
/* .data section which is used for initialized data */
|
||||
|
||||
.data : AT (_sidata)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
/* This is used by the startup in order to initialize the .data secion */
|
||||
_sdata = . ;
|
||||
|
||||
*(.data)
|
||||
*(.data.*)
|
||||
*(.gnu.linkonce.d*)
|
||||
|
||||
. = ALIGN(4);
|
||||
/* This is used by the startup in order to initialize the .data secion */
|
||||
_edata = . ;
|
||||
} >DATA
|
||||
|
||||
.stack :
|
||||
{
|
||||
. = . + _system_stack_size;
|
||||
. = ALIGN(4);
|
||||
_estack = .;
|
||||
} >DATA
|
||||
|
||||
__bss_start = .;
|
||||
.bss :
|
||||
{
|
||||
__bss_start__ = .;
|
||||
. = ALIGN(4);
|
||||
/* This is used by the startup in order to initialize the .bss secion */
|
||||
_sbss = .;
|
||||
|
||||
*(.bss)
|
||||
*(.bss*)
|
||||
*(.bss.*)
|
||||
*(COMMON)
|
||||
|
||||
. = ALIGN(4);
|
||||
__bss_end__ = .;
|
||||
} > RAM
|
||||
. = ALIGN(4);
|
||||
/* This is used by the startup in order to initialize the .bss secion */
|
||||
_ebss = . ;
|
||||
|
||||
*(.bss.init)
|
||||
} > DATA
|
||||
__bss_end = .;
|
||||
|
||||
.heap :
|
||||
{
|
||||
end = .;
|
||||
__HeapBase = .;
|
||||
_end = .;
|
||||
|
||||
*(.heap)
|
||||
} > RAM
|
||||
|
||||
/* .stack_dummy section doesn't contains any symbols.
|
||||
* It is only used for linker to calculate size of stack sections */
|
||||
.stack_dummy :
|
||||
{
|
||||
*(.stack)
|
||||
} > RAM
|
||||
|
||||
__StackTop = ORIGIN(RAM) + LENGTH(RAM);
|
||||
__StackLimit = __StackTop - SIZEOF(.stack_dummy);
|
||||
ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
|
||||
/* Stabs debugging sections. */
|
||||
.stab 0 : { *(.stab) }
|
||||
.stabstr 0 : { *(.stabstr) }
|
||||
.stab.excl 0 : { *(.stab.excl) }
|
||||
.stab.exclstr 0 : { *(.stab.exclstr) }
|
||||
.stab.index 0 : { *(.stab.index) }
|
||||
.stab.indexstr 0 : { *(.stab.indexstr) }
|
||||
.comment 0 : { *(.comment) }
|
||||
/* DWARF debug sections.
|
||||
* Symbols in the DWARF debugging sections are relative to the beginning
|
||||
* of the section so we begin them at 0. */
|
||||
/* DWARF 1 */
|
||||
.debug 0 : { *(.debug) }
|
||||
.line 0 : { *(.line) }
|
||||
/* GNU DWARF 1 extensions */
|
||||
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
||||
.debug_sfnames 0 : { *(.debug_sfnames) }
|
||||
/* DWARF 1.1 and DWARF 2 */
|
||||
.debug_aranges 0 : { *(.debug_aranges) }
|
||||
.debug_pubnames 0 : { *(.debug_pubnames) }
|
||||
/* DWARF 2 */
|
||||
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
|
||||
.debug_abbrev 0 : { *(.debug_abbrev) }
|
||||
.debug_line 0 : { *(.debug_line) }
|
||||
.debug_frame 0 : { *(.debug_frame) }
|
||||
.debug_str 0 : { *(.debug_str) }
|
||||
.debug_loc 0 : { *(.debug_loc) }
|
||||
.debug_macinfo 0 : { *(.debug_macinfo) }
|
||||
/* SGI/MIPS DWARF 2 extensions */
|
||||
.debug_weaknames 0 : { *(.debug_weaknames) }
|
||||
.debug_funcnames 0 : { *(.debug_funcnames) }
|
||||
.debug_typenames 0 : { *(.debug_typenames) }
|
||||
.debug_varnames 0 : { *(.debug_varnames) }
|
||||
}
|
||||
@@ -85,14 +85,13 @@ extern const float32_t twiddleCoef_rfft_1024[1024];
|
||||
extern const float32_t twiddleCoef_rfft_2048[2048];
|
||||
extern const float32_t twiddleCoef_rfft_4096[4096];
|
||||
|
||||
|
||||
/* floating-point bit reversal tables */
|
||||
#define ARMBITREVINDEXTABLE__16_TABLE_LENGTH ((uint16_t)20 )
|
||||
#define ARMBITREVINDEXTABLE__32_TABLE_LENGTH ((uint16_t)48 )
|
||||
#define ARMBITREVINDEXTABLE__64_TABLE_LENGTH ((uint16_t)56 )
|
||||
#define ARMBITREVINDEXTABLE_128_TABLE_LENGTH ((uint16_t)208 )
|
||||
#define ARMBITREVINDEXTABLE_256_TABLE_LENGTH ((uint16_t)440 )
|
||||
#define ARMBITREVINDEXTABLE_512_TABLE_LENGTH ((uint16_t)448 )
|
||||
#define ARMBITREVINDEXTABLE__16_TABLE_LENGTH ((uint16_t)20)
|
||||
#define ARMBITREVINDEXTABLE__32_TABLE_LENGTH ((uint16_t)48)
|
||||
#define ARMBITREVINDEXTABLE__64_TABLE_LENGTH ((uint16_t)56)
|
||||
#define ARMBITREVINDEXTABLE_128_TABLE_LENGTH ((uint16_t)208)
|
||||
#define ARMBITREVINDEXTABLE_256_TABLE_LENGTH ((uint16_t)440)
|
||||
#define ARMBITREVINDEXTABLE_512_TABLE_LENGTH ((uint16_t)448)
|
||||
#define ARMBITREVINDEXTABLE1024_TABLE_LENGTH ((uint16_t)1800)
|
||||
#define ARMBITREVINDEXTABLE2048_TABLE_LENGTH ((uint16_t)3808)
|
||||
#define ARMBITREVINDEXTABLE4096_TABLE_LENGTH ((uint16_t)4032)
|
||||
@@ -108,13 +107,13 @@ extern const uint16_t armBitRevIndexTable2048[ARMBITREVINDEXTABLE2048_TABLE_LENG
|
||||
extern const uint16_t armBitRevIndexTable4096[ARMBITREVINDEXTABLE4096_TABLE_LENGTH];
|
||||
|
||||
/* fixed-point bit reversal tables */
|
||||
#define ARMBITREVINDEXTABLE_FIXED___16_TABLE_LENGTH ((uint16_t)12 )
|
||||
#define ARMBITREVINDEXTABLE_FIXED___32_TABLE_LENGTH ((uint16_t)24 )
|
||||
#define ARMBITREVINDEXTABLE_FIXED___64_TABLE_LENGTH ((uint16_t)56 )
|
||||
#define ARMBITREVINDEXTABLE_FIXED__128_TABLE_LENGTH ((uint16_t)112 )
|
||||
#define ARMBITREVINDEXTABLE_FIXED__256_TABLE_LENGTH ((uint16_t)240 )
|
||||
#define ARMBITREVINDEXTABLE_FIXED__512_TABLE_LENGTH ((uint16_t)480 )
|
||||
#define ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH ((uint16_t)992 )
|
||||
#define ARMBITREVINDEXTABLE_FIXED___16_TABLE_LENGTH ((uint16_t)12)
|
||||
#define ARMBITREVINDEXTABLE_FIXED___32_TABLE_LENGTH ((uint16_t)24)
|
||||
#define ARMBITREVINDEXTABLE_FIXED___64_TABLE_LENGTH ((uint16_t)56)
|
||||
#define ARMBITREVINDEXTABLE_FIXED__128_TABLE_LENGTH ((uint16_t)112)
|
||||
#define ARMBITREVINDEXTABLE_FIXED__256_TABLE_LENGTH ((uint16_t)240)
|
||||
#define ARMBITREVINDEXTABLE_FIXED__512_TABLE_LENGTH ((uint16_t)480)
|
||||
#define ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH ((uint16_t)992)
|
||||
#define ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH ((uint16_t)1984)
|
||||
#define ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH ((uint16_t)4032)
|
||||
|
||||
|
||||
@@ -46,34 +46,34 @@
|
||||
#include "arm_math.h"
|
||||
#include "arm_common_tables.h"
|
||||
|
||||
extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len16;
|
||||
extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len32;
|
||||
extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len64;
|
||||
extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len128;
|
||||
extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len256;
|
||||
extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len512;
|
||||
extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len1024;
|
||||
extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len2048;
|
||||
extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len4096;
|
||||
extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len16;
|
||||
extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len32;
|
||||
extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len64;
|
||||
extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len128;
|
||||
extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len256;
|
||||
extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len512;
|
||||
extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len1024;
|
||||
extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len2048;
|
||||
extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len4096;
|
||||
|
||||
extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len16;
|
||||
extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len32;
|
||||
extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len64;
|
||||
extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len128;
|
||||
extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len256;
|
||||
extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len512;
|
||||
extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len1024;
|
||||
extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len2048;
|
||||
extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len4096;
|
||||
extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len16;
|
||||
extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len32;
|
||||
extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len64;
|
||||
extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len128;
|
||||
extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len256;
|
||||
extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len512;
|
||||
extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len1024;
|
||||
extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len2048;
|
||||
extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len4096;
|
||||
|
||||
extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len16;
|
||||
extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len32;
|
||||
extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len64;
|
||||
extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len128;
|
||||
extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len256;
|
||||
extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len512;
|
||||
extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len1024;
|
||||
extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len2048;
|
||||
extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len4096;
|
||||
extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len16;
|
||||
extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len32;
|
||||
extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len64;
|
||||
extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len128;
|
||||
extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len256;
|
||||
extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len512;
|
||||
extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len1024;
|
||||
extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len2048;
|
||||
extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len4096;
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -43,7 +43,8 @@
|
||||
|
||||
/********************************** PLL 设定 **********************************************
|
||||
* VCO输出频率 = PLL输入时钟 / INDIV * 4 * FBDIV
|
||||
* PLL输出频率 = PLL输入时钟 / INDIV * 4 * FBDIV / OUTDIV = VCO输出频率 / OUTDIV
|
||||
* PLL输出频率 = PLL输入时钟 / INDIV * 4 * FBDIV / OUTDIV = VCO输出频率 / OUTDIV
|
||||
* 注意:VCO输出频率需要在 [600MHz, 1200MHz] 之间
|
||||
*****************************************************************************************/
|
||||
#define SYS_PLL_SRC SYS_CLK_20MHz //可取值SYS_CLK_20MHz、SYS_CLK_XTAL
|
||||
|
||||
@@ -173,15 +174,29 @@ void SystemInit(void)
|
||||
}
|
||||
}
|
||||
|
||||
void switchCLK_20MHz(void)
|
||||
static void delay_3ms(void)
|
||||
{
|
||||
uint32_t i;
|
||||
|
||||
if (((SYS->CLKSEL & SYS_CLKSEL_SYS_Msk) == 0) &&
|
||||
((SYS->CLKSEL & SYS_CLKSEL_LFCK_Msk) == 0)) //32KHz
|
||||
{
|
||||
for (i = 0; i < 20; i++)
|
||||
__NOP();
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < 20000; i++)
|
||||
__NOP();
|
||||
}
|
||||
}
|
||||
|
||||
void switchCLK_20MHz(void)
|
||||
{
|
||||
SYS->HRCCR = (0 << SYS_HRCCR_OFF_Pos) |
|
||||
(0 << SYS_HRCCR_DBL_Pos); //HRC = 20MHz
|
||||
|
||||
for (i = 0; i < 1000; i++)
|
||||
__NOP();
|
||||
delay_3ms();
|
||||
|
||||
SYS->CLKSEL &= ~SYS_CLKSEL_HFCK_Msk; //HFCK <= HRC
|
||||
SYS->CLKSEL |= (1 << SYS_CLKSEL_SYS_Pos); //SYS_CLK <= HFCK
|
||||
@@ -189,13 +204,10 @@ void switchCLK_20MHz(void)
|
||||
|
||||
void switchCLK_40MHz(void)
|
||||
{
|
||||
uint32_t i;
|
||||
|
||||
SYS->HRCCR = (0 << SYS_HRCCR_OFF_Pos) |
|
||||
(1 << SYS_HRCCR_DBL_Pos); //HRC = 40MHz
|
||||
|
||||
for (i = 0; i < 1000; i++)
|
||||
__NOP();
|
||||
delay_3ms();
|
||||
|
||||
SYS->CLKSEL &= ~SYS_CLKSEL_HFCK_Msk; //HFCK <= HRC
|
||||
SYS->CLKSEL |= (1 << SYS_CLKSEL_SYS_Pos); //SYS_CLK <= HFCK
|
||||
@@ -203,14 +215,11 @@ void switchCLK_40MHz(void)
|
||||
|
||||
void switchCLK_32KHz(void)
|
||||
{
|
||||
uint32_t i;
|
||||
|
||||
SYS->CLKEN |= (1 << SYS_CLKEN_RTCBKP_Pos);
|
||||
|
||||
SYS->LRCCR &= ~(1 << SYS_LRCCR_OFF_Pos);
|
||||
|
||||
for (i = 0; i < 100; i++)
|
||||
__NOP();
|
||||
delay_3ms();
|
||||
|
||||
SYS->CLKSEL &= ~SYS_CLKSEL_LFCK_Msk; //LFCK <= LRC
|
||||
SYS->CLKSEL &= ~SYS_CLKSEL_SYS_Msk; //SYS_CLK <= LFCK
|
||||
@@ -218,12 +227,10 @@ void switchCLK_32KHz(void)
|
||||
|
||||
void switchCLK_XTAL(void)
|
||||
{
|
||||
uint32_t i;
|
||||
|
||||
SYS->XTALCR = (1 << SYS_XTALCR_EN_Pos);
|
||||
|
||||
for (i = 0; i < 1000; i++)
|
||||
__NOP();
|
||||
delay_3ms();
|
||||
delay_3ms();
|
||||
|
||||
SYS->CLKSEL |= (1 << SYS_CLKSEL_HFCK_Pos); //HFCK <= XTAL
|
||||
SYS->CLKSEL |= (1 << SYS_CLKSEL_SYS_Pos); //SYS_CLK <= HFCK
|
||||
@@ -231,13 +238,9 @@ void switchCLK_XTAL(void)
|
||||
|
||||
void switchCLK_PLL(void)
|
||||
{
|
||||
uint32_t i;
|
||||
|
||||
PLLInit();
|
||||
SYS->PLLCR |= (1 << SYS_PLLCR_OUTEN_Pos);
|
||||
|
||||
for (i = 0; i < 10000; i++)
|
||||
__NOP();
|
||||
SYS->PLLCR |= (1 << SYS_PLLCR_OUTEN_Pos);
|
||||
|
||||
SYS->CLKSEL |= (1 << SYS_CLKSEL_LFCK_Pos); //LFCK <= PLL
|
||||
SYS->CLKSEL &= ~SYS_CLKSEL_SYS_Msk; //SYS_CLK <= LFCK
|
||||
@@ -245,15 +248,12 @@ void switchCLK_PLL(void)
|
||||
|
||||
void PLLInit(void)
|
||||
{
|
||||
uint32_t i;
|
||||
|
||||
if (SYS_PLL_SRC == SYS_CLK_20MHz)
|
||||
{
|
||||
SYS->HRCCR = (0 << SYS_HRCCR_OFF_Pos) |
|
||||
(0 << SYS_HRCCR_DBL_Pos); //HRC = 20MHz
|
||||
|
||||
for (i = 0; i < 1000; i++)
|
||||
__NOP();
|
||||
delay_3ms();
|
||||
|
||||
SYS->PLLCR |= (1 << SYS_PLLCR_INSEL_Pos); //PLL_SRC <= HRC
|
||||
}
|
||||
@@ -261,8 +261,8 @@ void PLLInit(void)
|
||||
{
|
||||
SYS->XTALCR = (1 << SYS_XTALCR_EN_Pos);
|
||||
|
||||
for (i = 0; i < 20000; i++)
|
||||
;
|
||||
delay_3ms();
|
||||
delay_3ms();
|
||||
|
||||
SYS->PLLCR &= ~(1 << SYS_PLLCR_INSEL_Pos); //PLL_SRC <= XTAL
|
||||
}
|
||||
|
||||
@@ -126,32 +126,32 @@ void CAN_Transmit(CAN_TypeDef *CANx, uint32_t format, uint32_t id, uint8_t data[
|
||||
|
||||
if (format == CAN_FRAME_STD)
|
||||
{
|
||||
CANx->TXFRAME.INFO = (0 << CAN_INFO_FF_Pos) |
|
||||
(0 << CAN_INFO_RTR_Pos) |
|
||||
(size << CAN_INFO_DLC_Pos);
|
||||
CANx->FRAME.INFO = (0 << CAN_INFO_FF_Pos) |
|
||||
(0 << CAN_INFO_RTR_Pos) |
|
||||
(size << CAN_INFO_DLC_Pos);
|
||||
|
||||
CANx->TXFRAME.DATA[0] = id >> 3;
|
||||
CANx->TXFRAME.DATA[1] = id << 5;
|
||||
CANx->FRAME.DATA[0] = id >> 3;
|
||||
CANx->FRAME.DATA[1] = id << 5;
|
||||
|
||||
for (i = 0; i < size; i++)
|
||||
{
|
||||
CANx->TXFRAME.DATA[i + 2] = data[i];
|
||||
CANx->FRAME.DATA[i + 2] = data[i];
|
||||
}
|
||||
}
|
||||
else //if(format == CAN_FRAME_EXT)
|
||||
{
|
||||
CANx->TXFRAME.INFO = (1 << CAN_INFO_FF_Pos) |
|
||||
(0 << CAN_INFO_RTR_Pos) |
|
||||
(size << CAN_INFO_DLC_Pos);
|
||||
CANx->FRAME.INFO = (1 << CAN_INFO_FF_Pos) |
|
||||
(0 << CAN_INFO_RTR_Pos) |
|
||||
(size << CAN_INFO_DLC_Pos);
|
||||
|
||||
CANx->TXFRAME.DATA[0] = id >> 21;
|
||||
CANx->TXFRAME.DATA[1] = id >> 13;
|
||||
CANx->TXFRAME.DATA[2] = id >> 5;
|
||||
CANx->TXFRAME.DATA[3] = id << 3;
|
||||
CANx->FRAME.DATA[0] = id >> 21;
|
||||
CANx->FRAME.DATA[1] = id >> 13;
|
||||
CANx->FRAME.DATA[2] = id >> 5;
|
||||
CANx->FRAME.DATA[3] = id << 3;
|
||||
|
||||
for (i = 0; i < size; i++)
|
||||
{
|
||||
CANx->TXFRAME.DATA[i + 4] = data[i];
|
||||
CANx->FRAME.DATA[i + 4] = data[i];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -186,23 +186,23 @@ void CAN_TransmitRequest(CAN_TypeDef *CANx, uint32_t format, uint32_t id, uint32
|
||||
{
|
||||
if (format == CAN_FRAME_STD)
|
||||
{
|
||||
CANx->TXFRAME.INFO = (0 << CAN_INFO_FF_Pos) |
|
||||
(1 << CAN_INFO_RTR_Pos) |
|
||||
(0 << CAN_INFO_DLC_Pos);
|
||||
CANx->FRAME.INFO = (0 << CAN_INFO_FF_Pos) |
|
||||
(1 << CAN_INFO_RTR_Pos) |
|
||||
(0 << CAN_INFO_DLC_Pos);
|
||||
|
||||
CANx->TXFRAME.DATA[0] = id >> 3;
|
||||
CANx->TXFRAME.DATA[1] = id << 5;
|
||||
CANx->FRAME.DATA[0] = id >> 3;
|
||||
CANx->FRAME.DATA[1] = id << 5;
|
||||
}
|
||||
else //if(format == CAN_FRAME_EXT)
|
||||
{
|
||||
CANx->TXFRAME.INFO = (1 << CAN_INFO_FF_Pos) |
|
||||
(1 << CAN_INFO_RTR_Pos) |
|
||||
(0 << CAN_INFO_DLC_Pos);
|
||||
CANx->FRAME.INFO = (1 << CAN_INFO_FF_Pos) |
|
||||
(1 << CAN_INFO_RTR_Pos) |
|
||||
(0 << CAN_INFO_DLC_Pos);
|
||||
|
||||
CANx->TXFRAME.DATA[0] = id >> 21;
|
||||
CANx->TXFRAME.DATA[1] = id >> 13;
|
||||
CANx->TXFRAME.DATA[2] = id >> 5;
|
||||
CANx->TXFRAME.DATA[3] = id << 3;
|
||||
CANx->FRAME.DATA[0] = id >> 21;
|
||||
CANx->FRAME.DATA[1] = id >> 13;
|
||||
CANx->FRAME.DATA[2] = id >> 5;
|
||||
CANx->FRAME.DATA[3] = id << 3;
|
||||
}
|
||||
|
||||
if (once == 0)
|
||||
@@ -226,27 +226,27 @@ void CAN_TransmitRequest(CAN_TypeDef *CANx, uint32_t format, uint32_t id, uint32
|
||||
void CAN_Receive(CAN_TypeDef *CANx, CAN_RXMessage *msg)
|
||||
{
|
||||
uint32_t i;
|
||||
msg->format = (CANx->RXFRAME.INFO & CAN_INFO_FF_Msk) >> CAN_INFO_FF_Pos;
|
||||
msg->format = (CANx->FRAME.INFO & CAN_INFO_FF_Msk) >> CAN_INFO_FF_Pos;
|
||||
|
||||
msg->remote = (CANx->RXFRAME.INFO & CAN_INFO_RTR_Msk) >> CAN_INFO_RTR_Pos;
|
||||
msg->size = (CANx->RXFRAME.INFO & CAN_INFO_DLC_Msk) >> CAN_INFO_DLC_Pos;
|
||||
msg->remote = (CANx->FRAME.INFO & CAN_INFO_RTR_Msk) >> CAN_INFO_RTR_Pos;
|
||||
msg->size = (CANx->FRAME.INFO & CAN_INFO_DLC_Msk) >> CAN_INFO_DLC_Pos;
|
||||
|
||||
if (msg->format == CAN_FRAME_STD)
|
||||
{
|
||||
msg->id = (CANx->RXFRAME.DATA[0] << 3) | (CANx->RXFRAME.DATA[1] >> 5);
|
||||
msg->id = (CANx->FRAME.DATA[0] << 3) | (CANx->FRAME.DATA[1] >> 5);
|
||||
|
||||
for (i = 0; i < msg->size; i++)
|
||||
{
|
||||
msg->data[i] = CANx->RXFRAME.DATA[i + 2];
|
||||
msg->data[i] = CANx->FRAME.DATA[i + 2];
|
||||
}
|
||||
}
|
||||
else //if(msg->format == CAN_FRAME_EXT)
|
||||
{
|
||||
msg->id = (CANx->RXFRAME.DATA[0] << 21) | (CANx->RXFRAME.DATA[1] << 13) | (CANx->RXFRAME.DATA[2] << 5) | (CANx->RXFRAME.DATA[3] >> 3);
|
||||
msg->id = (CANx->FRAME.DATA[0] << 21) | (CANx->FRAME.DATA[1] << 13) | (CANx->FRAME.DATA[2] << 5) | (CANx->FRAME.DATA[3] >> 3);
|
||||
|
||||
for (i = 0; i < msg->size; i++)
|
||||
{
|
||||
msg->data[i] = CANx->RXFRAME.DATA[i + 4];
|
||||
msg->data[i] = CANx->FRAME.DATA[i + 4];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
|
||||
/******************************************************************************************************************************************
|
||||
* 函数名称: GPIO_Init()
|
||||
* 功能说明: 引脚初始化,包含引脚方向、上拉电阻、下拉电阻、开漏输出
|
||||
* 输 入: GPIO_TypeDef * GPIOx 指定GPIO端口,有效值包括GPIOA、GPIOB、GPIOC、GPIOM、GPION、GPIOP
|
||||
* 功能说明: 引脚初始化,包含引脚方向、上拉电阻、下拉电阻
|
||||
* 输 入: GPIO_TypeDef * GPIOx 指定GPIO端口,有效值包括GPIOA、GPIOB、GPIOC、GPIOM、GPION、GPIOP
|
||||
* uint32_t n 指定GPIO引脚,有效值包括PIN0、PIN1、PIN2、... ... PIN22、PIN23
|
||||
* uint32_t dir 引脚方向,0 输入 1 输出
|
||||
* uint32_t pull_up 上拉电阻,0 关闭上拉 1 开启上拉
|
||||
|
||||
@@ -20,8 +20,8 @@ uint32_t NORFL_Read(uint32_t addr);
|
||||
uint16_t NORFL_ReadID(uint32_t id_addr);
|
||||
|
||||
/* 当前版本总线读只支持字读
|
||||
#define NORFL_Read8(addr) *((volatile uint8_t *)(NORFLM_BASE + addr))
|
||||
#define NORFL_Read16(addr) *((volatile uint16_t *)(NORFLM_BASE + addr)) */
|
||||
#define NORFL_Read8(addr) *((volatile uint8_t *)(NORFLM_BASE + addr))
|
||||
#define NORFL_Read16(addr) *((volatile uint16_t *)(NORFLM_BASE + addr)) */
|
||||
#define NORFL_Read32(addr) *((volatile uint32_t *)(NORFLM_BASE + addr))
|
||||
|
||||
#define NORFL_CMD_READ 0
|
||||
|
||||
@@ -53,7 +53,7 @@ void RTC_Init(RTC_TypeDef *RTCx, RTC_InitStructure *initStruct)
|
||||
RTCx->MONDAY = (calcWeekDay(initStruct->Year, initStruct->Month, initStruct->Date) << RTC_MONDAY_DAY_Pos) |
|
||||
(initStruct->Month << RTC_MONDAY_MON_Pos);
|
||||
|
||||
RTCx->YEAR = initStruct->Year - 1901;
|
||||
RTCx->YEAR = initStruct->Year;
|
||||
|
||||
RTCx->LOAD = 1 << RTC_LOAD_TIME_Pos;
|
||||
|
||||
@@ -105,7 +105,7 @@ void RTC_Stop(RTC_TypeDef *RTCx)
|
||||
******************************************************************************************************************************************/
|
||||
void RTC_GetDateTime(RTC_TypeDef *RTCx, RTC_DateTime *dateTime)
|
||||
{
|
||||
dateTime->Year = RTCx->YEAR + 1901;
|
||||
dateTime->Year = RTCx->YEAR;
|
||||
dateTime->Month = (RTCx->MONDAY & RTC_MONDAY_MON_Msk) >> RTC_MONDAY_MON_Pos;
|
||||
dateTime->Date = (RTCx->DATHUR & RTC_DATHUR_DATE_Msk) >> RTC_DATHUR_DATE_Pos;
|
||||
dateTime->Day = 1 << ((RTCx->MONDAY & RTC_MONDAY_DAY_Msk) >> RTC_MONDAY_DAY_Pos);
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
* uint32_t peroid 取值0--4294967295,单位为单片机系统时钟周期
|
||||
* uint32_t mode WDT_MODE_RESET 超时产生复位 WDT_MODE_INTERRUPT 超时产生中断
|
||||
* 输 出: 无
|
||||
* 注意事项: 复位使能时中断不起作用,因为计数周期结束时芯片直接复位了,无法响应中断
|
||||
* 注意事项: 无
|
||||
******************************************************************************************************************************************/
|
||||
void WDT_Init(WDT_TypeDef *WDTx, uint32_t peroid, uint32_t mode)
|
||||
{
|
||||
@@ -36,16 +36,18 @@ void WDT_Init(WDT_TypeDef *WDTx, uint32_t peroid, uint32_t mode)
|
||||
|
||||
WDT_Stop(WDTx); //设置前先关闭
|
||||
|
||||
WDTx->LOAD = peroid;
|
||||
|
||||
if (mode == WDT_MODE_RESET)
|
||||
{
|
||||
WDTx->LOAD = peroid / 2; //第一个计数周期置位中断标志、第二个计数周期将芯片复位
|
||||
|
||||
NVIC_DisableIRQ(WDT_IRQn);
|
||||
|
||||
WDTx->CR |= (1 << WDT_CR_RSTEN_Pos);
|
||||
}
|
||||
else //mode == WDT_MODE_INTERRUPT
|
||||
{
|
||||
WDTx->LOAD = peroid;
|
||||
|
||||
NVIC_EnableIRQ(WDT_IRQn);
|
||||
|
||||
WDTx->CR &= ~(1 << WDT_CR_RSTEN_Pos);
|
||||
|
||||
+353
-473
File diff suppressed because it is too large.
Load diff
+137
-187
File diff suppressed because it is too large.
Load diff
+23
-10
@@ -16,6 +16,9 @@
|
||||
#define RT_USING_IDLE_HOOK
|
||||
#define RT_IDLE_HOOK_LIST_SIZE 4
|
||||
#define IDLE_THREAD_STACK_SIZE 256
|
||||
|
||||
/* kservice optimization */
|
||||
|
||||
#define RT_DEBUG
|
||||
#define RT_DEBUG_COLOR
|
||||
|
||||
@@ -39,8 +42,8 @@
|
||||
#define RT_USING_DEVICE
|
||||
#define RT_USING_CONSOLE
|
||||
#define RT_CONSOLEBUF_SIZE 128
|
||||
#define RT_CONSOLE_DEVICE_NAME "uart0"
|
||||
#define RT_VER_NUM 0x40003
|
||||
#define RT_CONSOLE_DEVICE_NAME "uart1"
|
||||
#define RT_VER_NUM 0x40004
|
||||
#define ARCH_ARM
|
||||
#define RT_USING_CPU_FFS
|
||||
#define ARCH_ARM_CORTEX_M
|
||||
@@ -59,16 +62,17 @@
|
||||
/* Command shell */
|
||||
|
||||
#define RT_USING_FINSH
|
||||
#define RT_USING_MSH
|
||||
#define FINSH_USING_MSH
|
||||
#define FINSH_THREAD_NAME "tshell"
|
||||
#define FINSH_THREAD_PRIORITY 20
|
||||
#define FINSH_THREAD_STACK_SIZE 4096
|
||||
#define FINSH_USING_HISTORY
|
||||
#define FINSH_HISTORY_LINES 5
|
||||
#define FINSH_USING_SYMTAB
|
||||
#define FINSH_USING_DESCRIPTION
|
||||
#define FINSH_THREAD_PRIORITY 20
|
||||
#define FINSH_THREAD_STACK_SIZE 4096
|
||||
#define FINSH_CMD_SIZE 80
|
||||
#define FINSH_USING_MSH
|
||||
#define FINSH_USING_MSH_DEFAULT
|
||||
#define MSH_USING_BUILT_IN_COMMANDS
|
||||
#define FINSH_USING_DESCRIPTION
|
||||
#define FINSH_ARG_MAX 10
|
||||
|
||||
/* Device virtual file system */
|
||||
@@ -79,6 +83,7 @@
|
||||
#define RT_USING_DEVICE_IPC
|
||||
#define RT_PIPE_BUFSZ 512
|
||||
#define RT_USING_SERIAL
|
||||
#define RT_USING_SERIAL_V1
|
||||
#define RT_SERIAL_RB_BUFSZ 64
|
||||
#define RT_USING_PIN
|
||||
|
||||
@@ -88,6 +93,7 @@
|
||||
/* POSIX layer and C standard library */
|
||||
|
||||
#define RT_USING_LIBC
|
||||
#define RT_LIBC_DEFAULT_TIMEZONE 8
|
||||
|
||||
/* Network */
|
||||
|
||||
@@ -109,6 +115,9 @@
|
||||
/* Utilities */
|
||||
|
||||
|
||||
/* RT-Thread Utestcases */
|
||||
|
||||
|
||||
/* RT-Thread online packages */
|
||||
|
||||
/* IoT - internet of things */
|
||||
@@ -139,6 +148,8 @@
|
||||
|
||||
/* system packages */
|
||||
|
||||
/* acceleration: Assembly language or algorithmic acceleration packages */
|
||||
|
||||
|
||||
/* Micrium: Micrium software products porting for RT-Thread */
|
||||
|
||||
@@ -146,13 +157,15 @@
|
||||
/* peripheral libraries and drivers */
|
||||
|
||||
|
||||
/* miscellaneous packages */
|
||||
/* AI packages */
|
||||
|
||||
|
||||
/* miscellaneous packages */
|
||||
|
||||
/* samples: kernel and components samples */
|
||||
|
||||
|
||||
/* games: games run on RT-Thread console */
|
||||
/* entertainment: terminal games and other interesting software packages */
|
||||
|
||||
|
||||
/* Hardware Drivers Config */
|
||||
@@ -162,7 +175,7 @@
|
||||
/* On-chip Peripheral Drivers */
|
||||
|
||||
#define BSP_USING_UART
|
||||
#define BSP_USING_UART0
|
||||
#define BSP_USING_UART1
|
||||
#define BSP_USING_GPIO
|
||||
|
||||
/* Onboard Peripheral Drivers */
|
||||
|
||||
Reference in new issue
Block a user