[BSP][all ls1c]change license to Apache-2.0

[BSP][ls1c] add rtc library
[BSP][ls1c] add pwm ,touch , rtc driver
This commit is contained in:
sundm75 committed 2018-12-24 18:49:00 +08:00
1 parent d592b41dfd
commit 029e161f59
65 files changed
+2043 -1087

No files matched your search

+25
View File
@@ -27,6 +27,9 @@ if RT_USING_SERIAL
config RT_USING_UART2
bool "Using RT_USING_UART2"
default y
config RT_USING_UART1
bool "Using RT_USING_UART1"
default y
config RT_UART_RX_BUFFER_SIZE
int "The rx buffer size"
@@ -80,4 +83,26 @@ config RT_CAN_USING_HDR
default y
endif
choice
prompt "Touch format"
default NO_TOUCH
config NO_TOUCH
bool "with no touch"
if RT_USING_RTGUI
config XPT2046_USING_TOUCH
bool "with XPT2046 touch"
endif
config TINA_USING_TOUCH
bool "with TINA touch"
endchoice
if RT_USING_RTC
config RT_RTC_NAME
string "RT_RTC_NAME"
default "RTC"
endif
+3 -16
View File
@@ -1,21 +1,7 @@
/*
* File : main.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2008 - 2017, RT-Thread Development Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
@@ -26,5 +12,6 @@
int main(int argc, char** argv)
{
return 0;
}
-4
View File
@@ -5,10 +5,6 @@ src = Glob('*.c')
CPPPATH = [cwd]
if GetDepend('RT_USING_RTGUI') == False:
SrcRemove(src, 'touch.c')
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH)
objs = []
+2 -13
View File
@@ -1,11 +1,7 @@
/*
* File : board.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006-2012, RT-Thread Develop Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rt-thread.org/license/LICENSE
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
@@ -33,13 +29,6 @@ extern void rt_hw_cache_init(void);
extern void invalidate_writeback_dcache_all(void);
extern void invalidate_icache_all(void);
/**
* @addtogroup Loongson LS1B
*/
/*@{*/
/**
* This is the timer interrupt service routine.
*/
+4 -8
View File
@@ -1,11 +1,7 @@
/*
* File : board.h
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006-2012, RT-Thread Develop Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rt-thread.org/license/LICENSE
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
@@ -20,7 +16,7 @@
void rt_hw_board_init(void);
/* 32M SDRAM */
#define RT_HW_HEAP_END (0x80000000 + 32 * 1024 * 1024)
#define CPU_HZ (252 * 1000000)
#define RT_HW_HEAP_END (0x80000000 + 32 * 1024 * 1024)
#define CPU_HZ (252 * 1000000)
#endif
File diff suppressed because it is too large. Load diff
+6 -10
View File
@@ -1,11 +1,7 @@
/*
* File : display_controller.h
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006-2012, RT-Thread Develop Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rt-thread.org/license/LICENSE
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
@@ -20,7 +16,7 @@
#include <rtthread.h>
#include "ls1c.h"
#define DC_BASE 0xBC301240 //Display Controller
#define DC_BASE 0xBC301240 //Display Controller
/* Frame Buffer registers */
#define DC_FB_CONFIG __REG32(DC_BASE + 0x000)
@@ -51,9 +47,9 @@
struct vga_struct
{
long pclk;
int hr,hss,hse,hfl;
int vr,vss,vse,vfl;
long pclk;
int hr,hss,hse,hfl;
int vr,vss,vse,vfl;
};
#endif
+6 -20
View File
@@ -1,21 +1,7 @@
/*
* File : drv_can.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006 - 2018, RT-Thread Development Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
@@ -119,6 +105,7 @@ static rt_err_t setfilter(struct ls1c_bxcan *pbxcan, struct rt_can_filter_config
}
return RT_EOK;
}
static void bxcan0_filter_init(struct rt_can_device *can)
{
struct ls1c_bxcan *pbxcan;
@@ -249,7 +236,6 @@ static void bxcan1_hw_init(void)
}
#endif
static rt_err_t configure(struct rt_can_device *can, struct can_configure *cfg)
{
CAN_TypeDef *pbxcan;
@@ -444,7 +430,7 @@ void ls1c_can0_irqhandler(int irq, void *param)
rt_kprintf("\r\nCan0 int TX happened!\r\n");
}
/*数据溢出中断*/
else if (( status & CAN_IR_TI) == CAN_IR_DOI)
else if (( status & CAN_IR_DOI) == CAN_IR_DOI)
{
rt_hw_can_isr(&bxcan0, RT_CAN_EVENT_RXOF_IND);
rt_kprintf("\r\nCan0 int RX OF happened!\r\n");
@@ -484,7 +470,7 @@ void ls1c_can1_irqhandler(int irq, void *param)
rt_kprintf("\r\nCan1 int TX happened!\r\n");
}
/*数据溢出中断*/
else if (( status & CAN_IR_TI) == CAN_IR_DOI)
else if (( status & CAN_IR_DOI) == CAN_IR_DOI)
{
rt_hw_can_isr(&bxcan1, RT_CAN_EVENT_RXOF_IND);
rt_kprintf("\r\nCan1 int RX OF happened!\r\n");
@@ -515,7 +501,7 @@ int ls1c_bxcan_init(void)
rt_kprintf("\r\ncan0 register! \r\n");
rt_hw_interrupt_install(LS1C_CAN0_IRQ,( rt_isr_handler_t)bxcan0data.irq , RT_NULL, "can0");
rt_hw_interrupt_umask(LS1C_CAN0_IRQ);
rt_hw_interrupt_umask(LS1C_CAN0_IRQ);
#endif
#ifdef USING_BXCAN1
bxcan1.config.baud_rate = CAN250kBaud;
+2 -16
View File
@@ -1,21 +1,7 @@
/*
* File : bxcan.h
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006 - 2018, RT-Thread Development Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
+2 -16
View File
@@ -1,21 +1,7 @@
/*
* File : drv_gpio.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
+2 -16
View File
@@ -1,21 +1,7 @@
/*
* File : drv_gpio.h
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
+8 -22
View File
@@ -1,25 +1,11 @@
/*
* File : drv_i2c.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2017-11-14 勤为本 first version
* 2017-11-14 勤为本 first version
*/
#include <rtthread.h>
@@ -30,8 +16,8 @@
#include "../libraries/ls1c_delay.h"
#define LS1C_I2C_SCL (57) // gpio57
#define LS1C_I2C_SDA (56) // gpio56
#define LS1C_I2C_SCL (51) // gpio57
#define LS1C_I2C_SDA (50) // gpio56
#define LS1C_SET_GPIO_MODE
@@ -104,8 +90,8 @@ static const struct rt_i2c_bit_ops bit_ops = {
.udelay = ls1c_udelay,
.delay_us = 20, // 此值为周期(us)
.timeout = 10, // 单位为tick
.delay_us = 20, // 此值为周期(us)
.timeout = 10, // 单位为tick
};
@@ -118,7 +104,7 @@ int ls1c_i2c_init(void)
ls1c_i2c_gpio_init();
rt_i2c_bit_add_bus(&bus, "i2c2");
rt_i2c_bit_add_bus(&bus, "i2c3");
return RT_EOK;
}
+3 -20
View File
@@ -1,34 +1,17 @@
/*
* File : drv_i2c.h
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2017-11-14 ÇÚΪ±¾ first version
* 2017-11-14 勤为本 first version
*/
#ifndef LS1C_DRV_I2C_H
#define LS1C_DRV_I2C_H
int ls1c_i2c_init(void);
#endif
+178
View File
@@ -0,0 +1,178 @@
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2018-12-04 Sundm75 the first version
*/
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
#include <rtthread.h>
#include <rtdevice.h>
#include "ls1c.h"
#include "../libraries/ls1c_public.h"
#include "../libraries/ls1c_regs.h"
#include "../libraries/ls1c_clock.h"
#include "../libraries/ls1c_pwm.h"
#include "../libraries/ls1c_pin.h"
#define PWM_CHANNEL_MAX (4) /* 0-3*/
#ifdef RT_USING_PWM
struct rt_ls1c_pwm
{
struct rt_device_pwm parent;
rt_uint32_t period[PWM_CHANNEL_MAX];
rt_uint32_t pulse[PWM_CHANNEL_MAX];
};
static struct rt_ls1c_pwm _ls1c_pwm_device;
static rt_err_t set(struct rt_device_pwm *device, struct rt_pwm_configuration *configuration)
{
rt_err_t result = RT_EOK;
struct rt_ls1c_pwm *ls1c_pwm_device = (struct rt_ls1c_pwm *)device;
if (configuration->channel > (PWM_CHANNEL_MAX - 1))
{
result = -RT_EIO;
goto _exit;
}
rt_kprintf("drv_pwm.c set channel %d: period: %d, pulse: %d\n", configuration->channel, configuration->period, configuration->pulse);
ls1c_pwm_device->period[configuration->channel] = configuration->period;
ls1c_pwm_device->pulse[configuration->channel] = configuration->pulse;
_exit:
return result;
}
static rt_err_t get(struct rt_device_pwm *device, struct rt_pwm_configuration *configuration)
{
rt_err_t result = RT_EOK;
struct rt_ls1c_pwm *ls1c_pwm_device = (struct rt_ls1c_pwm *)device;
if (configuration->channel > (PWM_CHANNEL_MAX - 1))
{
result = -RT_EIO;
goto _exit;
}
configuration->period = ls1c_pwm_device->period[configuration->channel];
configuration->pulse = ls1c_pwm_device->pulse[configuration->channel];
rt_kprintf("drv_pwm.c get channel %d: period: %d, pulse: %d\n", configuration->channel, configuration->period, configuration->pulse);
_exit:
return result;
}
static rt_err_t control(struct rt_device_pwm *device, int cmd, void *arg)
{
rt_err_t result = RT_EOK;
struct rt_pwm_configuration * configuration = (struct rt_pwm_configuration *)arg;
rt_kprintf("drv_pwm.c control cmd: %d. \n", cmd);
if (cmd == PWM_CMD_ENABLE)
{
rt_kprintf("PWM_CMD_ENABLE\n");
pwm_info_t pwm_info;
switch ( configuration->channel)
{
case 0:
pwm_info.gpio = LS1C_PWM0_GPIO06;
//pwm_info.gpio = LS1C_PWM0_GPIO04;
break;
case 1:
pwm_info.gpio = LS1C_PWM1_GPIO92;
//pwm_info.gpio = LS1C_PWM1_GPIO05;
break;
case 2:
pwm_info.gpio = LS1C_PWM2_GPIO52;
//pwm_info.gpio = LS1C_PWM2_GPIO46;
break;
case 3:
pwm_info.gpio = LS1C_PWM3_GPIO47;
//pwm_info.gpio = LS1C_PWM3_GPIO53;
break;
default:
break;
}
pwm_info.mode = PWM_MODE_NORMAL;
pwm_info.duty = ( (float)configuration->pulse ) / ((float)configuration->period );
pwm_info.period_ns = configuration->period;
pwm_init(&pwm_info);
pwm_enable(&pwm_info);
}
else if (cmd == PWM_CMD_DISABLE)
{
rt_kprintf("PWM_CMD_DISABLE\n");
pwm_info_t pwm_info;
switch ( configuration->channel)
{
case 0:
pwm_info.gpio = LS1C_PWM0_GPIO06;
//pwm_info.gpio = LS1C_PWM0_GPIO04;
break;
case 1:
pwm_info.gpio = LS1C_PWM1_GPIO92;
//pwm_info.gpio = LS1C_PWM1_GPIO05;
break;
case 2:
pwm_info.gpio = LS1C_PWM2_GPIO52;
//pwm_info.gpio = LS1C_PWM2_GPIO46;
break;
case 3:
pwm_info.gpio = LS1C_PWM3_GPIO47;
//pwm_info.gpio = LS1C_PWM3_GPIO53;
break;
default:
break;
}
pwm_info.mode = PWM_MODE_NORMAL;
pwm_info.duty = ( (float)configuration->pulse ) / ((float)configuration->period );
pwm_info.period_ns = configuration->period;
pwm_init(&pwm_info);
pwm_disable(&pwm_info);
}
else if (cmd == PWM_CMD_SET)
{
rt_kprintf("PWM_CMD_SET\n");
result = set(device, (struct rt_pwm_configuration *)arg);
}
else if (cmd == PWM_CMD_GET)
{
rt_kprintf("PWM_CMD_GET\n");
result = get(device, (struct rt_pwm_configuration *)arg);
}
return result;
}
static const struct rt_pwm_ops pwm_ops =
{
control,
};
int rt_hw_pwm_init(void)
{
int ret = RT_EOK;
/* add pwm initial. */
ret = rt_device_pwm_register(&_ls1c_pwm_device.parent, "pwm", &pwm_ops, RT_NULL);
return ret;
}
INIT_DEVICE_EXPORT(rt_hw_pwm_init);
#endif /*RT_USING_PWM*/
+16
View File
@@ -0,0 +1,16 @@
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2018-12-04 Sundm75 the first version
*/
#ifndef LS1C_DRV_PWM_H
#define LS1C_DRV_PWM_H
int ls1c_pwm_init(void);
#endif /*DRV_CAN_H_*/
+177
View File
@@ -0,0 +1,177 @@
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2018-05-05 sundm75 first version
*/
/* Includes ------------------------------------------------------------------*/
#include "board.h"
#include "drv_rtc.h"
#include <rtdevice.h>
#include "../libraries/ls1c_regs.h"
#include "../libraries/ls1c_rtc.h"
//#define RT_RTC_DEBUG
#if defined(RT_USING_RTC)
#ifdef RT_RTC_DEBUG
#define rtc_debug(format,args...) rt_kprintf(format, ##args)
#else
#define rtc_debug(format,args...)
#endif
static struct rt_device rtc;
RTC_TypeDef * RTC_Handler;
static time_t get_timestamp(void)
{
struct tm tm_new = {0};
RTC_TimeTypeDef rtcDate;
RTC_GetTime(RTC_Handler, &rtcDate);
tm_new.tm_sec = rtcDate.Seconds;
tm_new.tm_min = rtcDate.Minutes;
tm_new.tm_hour = rtcDate.Hours;
tm_new.tm_mday = rtcDate.Date;
tm_new.tm_mon = rtcDate.Month- 1;
tm_new.tm_year = rtcDate.Year + 2000 - 1900;
return mktime(&tm_new);
}
static int set_timestamp(time_t timestamp)
{
struct tm *p_tm;
RTC_TimeTypeDef rtcDate;
p_tm = localtime(&timestamp);
rtcDate.Seconds= p_tm->tm_sec ;
rtcDate.Minutes= p_tm->tm_min ;
rtcDate.Hours= p_tm->tm_hour;
rtcDate.Date= p_tm->tm_mday;
rtcDate.Month= p_tm->tm_mon + 1;
rtcDate.Year= p_tm->tm_year + 1900 - 2000;
RTC_SetTime(RTC_Handler, &rtcDate);
rt_kprintf("\r\nrtcDate is %d.%d.%d - %d:%d:%d",rtcDate.Year, rtcDate.Month, rtcDate.Date, rtcDate.Hours, rtcDate.Minutes, rtcDate.Seconds);
return RT_EOK;
}
rt_uint8_t RTC_Init(void)
{
RTC_Handler = RTC;
return 0;
}
static rt_err_t rt_rtc_open(rt_device_t dev, rt_uint16_t oflag)
{
if (dev->rx_indicate != RT_NULL)
{
/* Open Interrupt */
}
return RT_EOK;
}
static rt_size_t rt_rtc_read(
rt_device_t dev,
rt_off_t pos,
void* buffer,
rt_size_t size)
{
return 0;
}
/**
* This function configure RTC device.
*
* @param dev, pointer to device descriptor.
* @param cmd, RTC control command.
*
* @return the error code.
*/
static rt_err_t rt_rtc_control(rt_device_t dev, int cmd, void *args)
{
rt_err_t result;
RT_ASSERT(dev != RT_NULL);
switch (cmd)
{
case RT_DEVICE_CTRL_RTC_GET_TIME:
*(rt_uint32_t *)args = get_timestamp();
rtc_debug("RTC: get rtc_time %x\n", *(rt_uint32_t *)args);
break;
case RT_DEVICE_CTRL_RTC_SET_TIME:
{
result = set_timestamp(*(rt_uint32_t *)args);
rtc_debug("RTC: set rtc_time %x\n", *(rt_uint32_t *)args);
}
break;
}
return result;
}
/**
* This function register RTC device.
*
* @param device, pointer to device descriptor.
* @param name, device name.
* @param flag, configuration flags.
*
* @return the error code.
*/
rt_err_t rt_hw_rtc_register(
rt_device_t device,
const char *name,
rt_uint32_t flag)
{
RT_ASSERT(device != RT_NULL);
device->type = RT_Device_Class_RTC;
device->rx_indicate = RT_NULL;
device->tx_complete = RT_NULL;
device->init = RT_NULL;
device->open = rt_rtc_open;
device->close = RT_NULL;
device->read = rt_rtc_read;
device->write = RT_NULL;
device->control = rt_rtc_control;
device->user_data = RT_NULL; /* no private */
/* register a character device */
return rt_device_register(device, name, RT_DEVICE_FLAG_RDWR | flag);
}
/**
* This function initialize RTC module related hardware and register RTC device to kernel.
*
* @param none.
*
* @return the error code.
*/
int rt_hw_rtc_init(void)
{
RTC_Init();
/* register rtc device */
rt_hw_rtc_register(&rtc, RT_RTC_NAME, 0);
return RT_EOK;
}
INIT_BOARD_EXPORT(rt_hw_rtc_init);
#endif
+19
View File
@@ -0,0 +1,19 @@
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2018-05-05 sundm75 first version
*/
#ifndef __DRV_RTC_H__
#define __DRV_RTC_H__
#include <rtthread.h>
#include <rtdevice.h>
int rt_hw_rtc_init(void);
#endif
+6 -20
View File
@@ -1,25 +1,11 @@
/*
* File : drv_spi.h
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2017-11-02 勤为本 first version
* 2017-11-02 勤为本 first version
*/
#ifndef LS1C_DRV_SPI_H
@@ -43,9 +29,9 @@ struct ls1c_spi_cs
/*
* 初始化并注册龙芯1c的spi总线
* @SPI SPI总线,比如LS1C_SPI_0, LS1C_SPI_1
* @spi_bus_name 总线名字
* 初始化并注册龙芯1c的spi总线
* @SPI SPI总线,比如LS1C_SPI_0, LS1C_SPI_1
* @spi_bus_name 总线名字
* @ret
*/
rt_err_t ls1c_spi_bus_register(rt_uint8_t SPI, const char *spi_bus_name);
File diff suppressed because it is too large. Load diff
+51
View File
@@ -0,0 +1,51 @@
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2018-02-08 Zhangyihong the first version
*/
#ifndef __DRV_TOUCH_H__
#define __DRV_TOUCH_H__
#include "rtthread.h"
#include "rtdevice.h"
#define TOUCH_EVENT_UP (0x01)
#define TOUCH_EVENT_DOWN (0x02)
#define TOUCH_EVENT_MOVE (0x03)
#define TOUCH_EVENT_NONE (0x80)
struct touch_message
{
rt_uint16_t x;
rt_uint16_t y;
rt_uint8_t event;
};
typedef struct touch_message *touch_msg_t;
struct touch_ops
{
void (* isr_enable)(rt_bool_t);
rt_err_t (* read_point)(touch_msg_t);
void (* init)(struct rt_i2c_bus_device *);
void (* deinit)(void);
};
typedef struct touch_ops *touch_ops_t;
struct touch_drivers
{
rt_list_t list;
unsigned char address;
rt_bool_t (*probe)(struct rt_i2c_bus_device *i2c_bus);
rt_sem_t isr_sem;
touch_ops_t ops;
void *user_data;
};
typedef struct touch_drivers *touch_drv_t;
extern void rt_touch_drivers_register(touch_drv_t drv);
#endif
File diff suppressed because it is too large. Load diff
+36 -19
View File
@@ -1,21 +1,7 @@
/*
* File : drv_uart.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2008 - 2016, RT-Thread Development Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
@@ -131,7 +117,7 @@ static void uart_irq_handler(int vector, void *param)
}
static const struct rt_uart_ops stm32_uart_ops =
static const struct rt_uart_ops ls1c_uart_ops =
{
ls1c_uart_configure,
ls1c_uart_control,
@@ -146,6 +132,15 @@ struct rt_uart_ls1c uart2 =
LS1C_UART2_IRQ,
};
struct rt_serial_device serial2;
#endif /* RT_USING_UART2 */
#if defined(RT_USING_UART1)
struct rt_uart_ls1c uart1 =
{
LS1C_UART1,
LS1C_UART1_IRQ,
};
struct rt_serial_device serial1;
#endif /* RT_USING_UART1 */
void rt_hw_uart_init(void)
@@ -156,7 +151,7 @@ void rt_hw_uart_init(void)
#ifdef RT_USING_UART2
uart = &uart2;
serial2.ops = &stm32_uart_ops;
serial2.ops = &ls1c_uart_ops;
serial2.config = config;
pin_set_purpose(36, PIN_PURPOSE_OTHER);
@@ -166,12 +161,34 @@ void rt_hw_uart_init(void)
rt_hw_interrupt_install(uart->IRQ, uart_irq_handler, &serial2, "UART2");
/* register UART1 device */
/* register UART2 device */
rt_hw_serial_register(&serial2,
"uart2",
//RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_DMA_RX,
RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX,
uart);
#endif /* RT_USING_UART2 */
#ifdef RT_USING_UART1
uart = &uart1;
serial1.ops = &ls1c_uart_ops;
serial1.config = config;
pin_set_purpose(2, PIN_PURPOSE_OTHER);
pin_set_purpose(3, PIN_PURPOSE_OTHER);
pin_set_remap(2, PIN_REMAP_FOURTH);
pin_set_remap(3, PIN_REMAP_FOURTH);
rt_hw_interrupt_install(uart->IRQ, uart_irq_handler, &serial1, "UART1");
/* register UART1 device */
rt_hw_serial_register(&serial1,
"uart1",
//RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_DMA_RX,
RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX,
uart);
#endif /* RT_USING_UART1 */
}
+2 -16
View File
@@ -1,21 +1,7 @@
/*
* File : drv_uart.h
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
+17 -31
View File
@@ -1,24 +1,10 @@
/*
* File :hw_i2c.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006 - 2017, RT-Thread Development Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* Date Author Notes
* 2018-01-04 Sundm75 the first version
*/
@@ -40,31 +26,31 @@ rt_size_t rt_i2c_master_xfer(struct rt_i2c_bus_device *bus,
rt_uint32_t num)
{
struct ls1c_i2c_bus * i2c_bus = (struct ls1c_i2c_bus *)bus;
ls1c_i2c_info_t i2c_info;
ls1c_i2c_info_t i2c_info;
struct rt_i2c_msg *msg;
int i;
rt_int32_t ret = RT_EOK;
i2c_info.clock = 50000; // 50kb/s
i2c_info.I2Cx = i2c_bus->u32Module;
i2c_init(&i2c_info);
i2c_info.I2Cx = i2c_bus->u32Module;
i2c_init(&i2c_info);
for (i = 0; i < num; i++)
{
msg = &msgs[i];
if (msg->flags == RT_I2C_RD)
{
i2c_send_start_and_addr(&i2c_info, msg->addr, LS1C_I2C_DIRECTION_READ);
i2c_receive_ack(&i2c_info);
i2c_receive_data(&i2c_info, (rt_uint8_t *)msg->buf, msg->len);
i2c_send_stop(&i2c_info);
}
i2c_send_start_and_addr(&i2c_info, msg->addr, LS1C_I2C_DIRECTION_READ);
i2c_receive_ack(&i2c_info);
i2c_receive_data(&i2c_info, (rt_uint8_t *)msg->buf, msg->len);
i2c_send_stop(&i2c_info);
}
else if(msg->flags == RT_I2C_WR)
{
i2c_send_start_and_addr(&i2c_info, msg->addr, LS1C_I2C_DIRECTION_WRITE);
i2c_receive_ack(&i2c_info);
i2c_send_data(&i2c_info, (rt_uint8_t *)msg->buf, msg->len);
i2c_send_stop(&i2c_info);
}
i2c_send_start_and_addr(&i2c_info, msg->addr, LS1C_I2C_DIRECTION_WRITE);
i2c_receive_ack(&i2c_info);
i2c_send_data(&i2c_info, (rt_uint8_t *)msg->buf, msg->len);
i2c_send_stop(&i2c_info);
}
ret++;
}
return ret;
+2 -16
View File
@@ -1,21 +1,7 @@
/*
* File : hw_i2c.h
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006 - 2017, RT-Thread Development Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
+6
View File
@@ -5,6 +5,12 @@ src = Glob('*.c')
CPPPATH = [cwd]
if GetDepend('RT_USING_LWIP') == False:
SrcRemove(src, 'mii.c')
SrcRemove(src, 'synopGMAC.c')
SrcRemove(src, 'synopGMAC_Dev.c')
SrcRemove(src, 'synopGMAC_plat.c')
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH)
+2 -16
View File
@@ -1,21 +1,7 @@
/*
* File : mii.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) chinesebear
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
+2 -16
View File
@@ -1,21 +1,7 @@
/*
* File : mii.h
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) chinesebear
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
+2 -16
View File
@@ -1,21 +1,7 @@
/*
* File : synopGMAC.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) chinesebear
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
+2 -16
View File
@@ -1,21 +1,7 @@
/*
* File : synopGMAC.h
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) chinesebear
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
+2 -28
View File
@@ -1,33 +1,7 @@
/** \file
* This file defines the synopsys GMAC device dependent functions.
* Most of the operations on the GMAC device are available in this file.
* Functions for initiliasing and accessing MAC/DMA/PHY registers and the DMA descriptors
* are encapsulated in this file. The functions are platform/host/OS independent.
* These functions in turn use the low level device dependent (HAL) functions to
* access the register space.
* \internal
* ------------------------REVISION HISTORY---------------------------------
* Synopsys 01/Aug/2007 Created
*/
/*
* File : synopGMAC_Dev.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) chinesebear
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
+2 -27
View File
@@ -1,32 +1,7 @@
/**\file
* This file defines the function prototypes for the Synopsys GMAC device and the
* Marvell 88E1011/88E1011S integrated 10/100/1000 Gigabit Ethernet Transceiver.
* Since the phy register mapping are standardised, the phy register map and the
* bit definitions remain the same for other phy as well.
* This also defines some of the Ethernet related parmeters.
* \internal
* -----------------------------REVISION HISTORY------------------------------------
* Synopsys 01/Aug/2007 Created
*/
/*
* File : synopGMAC_Dev.h
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) chinesebear
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
+2 -16
View File
@@ -1,21 +1,7 @@
/*
* File : synopGMAC_Host.h
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) chinesebear
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
+2 -16
View File
@@ -1,21 +1,7 @@
/*
* File : synopGMAC_debug.h
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) chinesebear
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
@@ -1,30 +1,7 @@
/** \file
* Header file for the nework dependent functionality.
* The function prototype listed here are linux dependent.
*
* \internal
* ---------------------------REVISION HISTORY-------------------
* Synopsys 01/Aug/2007 Created
*/
/*
* File : synopGMAC_network_interface.h
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) chinesebear
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
+2 -29
View File
@@ -1,34 +1,7 @@
/**\file
* This file defines the wrapper for the platform/OS related functions
* The function definitions needs to be modified according to the platform
* and the Operating system used.
* This file should be handled with greatest care while porting the driver
* to a different platform running different operating system other than
* Linux 2.6.xx.
* \internal
* ----------------------------REVISION HISTORY-----------------------------
* Synopsys 01/Aug/2007 Created
*/
/*
* File : synopGMAC_plat.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) chinesebear
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
+2 -28
View File
@@ -1,33 +1,7 @@
/**\file
* This file serves as the wrapper for the platform/OS dependent functions
* It is needed to modify these functions accordingly based on the platform and the
* OS. Whenever the synopsys GMAC driver ported on to different platform, this file
* should be handled at most care.
* The corresponding function definitions for non-inline functions are available in
* synopGMAC_plat.c file.
* \internal
* -------------------------------------REVISION HISTORY---------------------------
* Synopsys 01/Aug/2007 Created
*/
/*
* File : synopGMAC_plat.h
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) chinesebear
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
+2 -16
View File
@@ -1,21 +1,7 @@
/*
* File : synopGMAC_types.h
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) chinesebear
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
File diff suppressed because it is too large. Load diff
+2 -16
View File
@@ -1,21 +1,7 @@
/*
* File : touch.h
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
+6 -19
View File
@@ -1,21 +1,7 @@
/*
* File : ls1c_can.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006 - 2018, RT-Thread Development Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
@@ -25,6 +11,7 @@
#include "ls1c.h"
#include "ls1c_public.h"
#include "ls1c_can.h"
#include "ls1c_delay.h"
unsigned char set_reset_mode(CAN_TypeDef* CANx)
{
@@ -51,7 +38,7 @@ unsigned char set_reset_mode(CAN_TypeDef* CANx)
/*检查复位标志*/
status = CANx->MOD;
}
rt_kprintf("\r\nSetting SJA1000 into reset mode failed!\r\n");
printf("\r\nSetting SJA1000 into reset mode failed!\r\n");
return 0;
}
@@ -77,7 +64,7 @@ static unsigned char set_normal_mode(CAN_TypeDef* CANx)
delay_us(10);
status = CANx->MOD;
}
rt_kprintf("\r\nSetting SJA1000 into normal mode failed!\r\n");
printf("\r\nSetting SJA1000 into normal mode failed!\r\n");
return 0;
}
@@ -102,7 +89,7 @@ unsigned char CAN_Init(CAN_TypeDef* CANx, CAN_InitTypeDef* CAN_InitStruct)
status = CANx->MOD;
if( status == 0xFF)
{
rt_kprintf("\n Probe can0 failed \r\n");
printf("\n Probe can0 failed \r\n");
return CAN_InitStatus_Failed;
}
+3 -18
View File
@@ -1,22 +1,7 @@
/*
* File : ls1c_can.h
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006 - 2018, RT-Thread Development Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs: (Pelican Mode)
* Date Author Notes
@@ -221,7 +206,7 @@ unsigned char CAN_Transmit(CAN_TypeDef* CANx, CanTxMsg* TxMessage);
void CAN_Receive(CAN_TypeDef* CANx, CanRxMsg* RxMessage);
unsigned char set_reset_mode(CAN_TypeDef* CANx);
unsigned char set_start(CAN_TypeDef* CANx);
unsigned char set_start(CAN_TypeDef* CANx);
#endif
+25 -21
View File
@@ -1,28 +1,32 @@
/*************************************************************************
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* 时钟相关函数
* SPDX-License-Identifier: Apache-2.0
*
*************************************************************************/
* Change Logs:
* Date Author Notes
* 2017-09-06 勤为本 first version
*/
#include "ls1c_regs.h"
#include "ls1c_public.h"
// 晶振的频率
// 晶振的频率
#define AHB_CLK (24000000)
#define APB_CLK (AHB_CLK)
// START_FREQ寄存器bits
// START_FREQ寄存器bits
#define M_PLL_SHIFT (8)
#define M_PLL (0xff << M_PLL_SHIFT) // PLL倍频系数的整数部分
#define M_PLL (0xff << M_PLL_SHIFT) // PLL倍频系数的整数部分
#define FRAC_N_SHIFT (16)
#define FRAC_N (0xff << FRAC_N_SHIFT) // PLL倍频系数的小数部分
#define FRAC_N (0xff << FRAC_N_SHIFT) // PLL倍频系数的小数部分
#define DIV_SDRAM_SHIFT (0)
#define DIV_SDRAM (0x3 << DIV_SDRAM_SHIFT)
// CLK_DIV_PARAM寄存器bits
// CLK_DIV_PARAM寄存器bits
#define DIV_PIX_EN (0x1 << 31)
#define DIV_PIX (0x7f << 24)
#define DIV_CAM_EN (0x1 << 23)
@@ -42,8 +46,8 @@
/*
* 获取PLL频率
* @ret PLL频率
* 获取PLL频率
* @ret PLL频率
*/
unsigned long clk_get_pll_rate(void)
{
@@ -58,8 +62,8 @@ unsigned long clk_get_pll_rate(void)
/*
* 获取CPU频率
* @ret CPU频率
* 获取CPU频率
* @ret CPU频率
*/
unsigned long clk_get_cpu_rate(void)
{
@@ -69,8 +73,8 @@ unsigned long clk_get_cpu_rate(void)
pll_rate = clk_get_pll_rate();
ctrl = reg_read_32((volatile unsigned int *)LS1C_CLK_DIV_PARAM);
// 选择时钟来源
if (DIV_CPU_SEL & ctrl) // pll分频作为时钟信号
// 选择时钟来源
if (DIV_CPU_SEL & ctrl) // pll分频作为时钟信号
{
if (DIV_CPU_EN & ctrl)
{
@@ -81,7 +85,7 @@ unsigned long clk_get_cpu_rate(void)
cpu_rate = pll_rate / 2;
}
}
else // bypass模式,晶振作为时钟输入
else // bypass模式,晶振作为时钟输入
{
cpu_rate = APB_CLK;
}
@@ -91,8 +95,8 @@ unsigned long clk_get_cpu_rate(void)
/*
* 获取DDR频率
* @ret DDR频率
* 获取DDR频率
* @ret DDR频率
*/
unsigned long clk_get_ddr_rate(void)
{
@@ -125,8 +129,8 @@ unsigned long clk_get_ddr_rate(void)
/*
* 获取APB频率
* @ret APB频率
* 获取APB频率
* @ret APB频率
*/
unsigned long clk_get_apb_rate(void)
{
@@ -135,8 +139,8 @@ unsigned long clk_get_apb_rate(void)
/*
* 获取DC频率
* @ret DC频率
* 获取DC频率
* @ret DC频率
*/
unsigned long clk_get_dc_rate(void)
{
+7 -3
View File
@@ -1,8 +1,12 @@
/*************************************************************************
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* 时钟相关头文件
* SPDX-License-Identifier: Apache-2.0
*
*************************************************************************/
* Change Logs:
* Date Author Notes
* 2017-09-06 勤为本 first version
*/
#ifndef __OPENLOONGSON_CLOCK_H
+17 -8
View File
@@ -1,4 +1,12 @@
// 软件延时源文件
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2017-09-06 勤为本 first version
*/
#include "ls1c_clock.h"
@@ -12,7 +20,7 @@
*/
void delay_ms(int j)
{
int k_max = clk_get_cpu_rate()/1000/3; // 除以1000表示ms,除以3为测试所得的经验(可以理解为最内层循环执行一次需要的时钟个数)
int k_max = clk_get_cpu_rate()/1000/92; // 除以1000表示ms,另外一个除数为实验测得的经验值
int k = k_max;
for ( ; j > 0; j--)
@@ -33,24 +41,25 @@ void delay_ms(int j)
*/
void delay_us(int n)
{
int count_1us = clk_get_cpu_rate() / 1000000 / 3; // 延时1us的循环次数
int count_1us = 252000000 / 1000000 / 84; // 延时1us的循环次数
// 252000000为cpu频率,除以1000000表示延时单位为us,92为实验测得的经验值
int count_max; // 延时n微秒的循环次数
int tmp;
// 根据延时长短微调(注意,这里是手动优化的,cpu频率改变了可能需要重新优化,此时cpu频率为252Mhz)
// 微调
count_max = n * count_1us;
if (10 >= n) // <=10us
{
count_1us -= 35;
count_max = count_max / 3;
}
else if (100 >= n) // <= 100us
{
count_1us -= 6;
count_max = count_max - count_max / 5;
}
else // > 100us
{
count_1us -= 1;
count_max = count_max - count_max / 10;
}
count_max = n * count_1us;
// 延时
for (tmp = count_max; tmp > 0; tmp--)
+9 -2
View File
@@ -1,5 +1,12 @@
// 软件延时头文件
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2017-09-06 勤为本 first version
*/
#ifndef __OPENLOONGSON_DELAY_H
+48 -40
View File
@@ -1,4 +1,12 @@
// 封装gpio接口
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2017-09-06 勤为本 first version
*/
#include "ls1c_public.h"
@@ -8,13 +16,13 @@
/*
* 获取指定gpio的CFG寄存器
* @gpio gpio编号
* @ret CFG寄存器
* 获取指定gpio的CFG寄存器
* @gpio gpio编号
* @ret CFG寄存器
*/
volatile unsigned int *gpio_get_cfg_reg(unsigned int gpio)
{
volatile unsigned int *gpio_cfgx = NULL; // GPIO_CFGx寄存器
volatile unsigned int *gpio_cfgx = NULL; // GPIO_CFGx寄存器
unsigned int port = GPIO_GET_PORT(gpio);
switch (port)
@@ -45,13 +53,13 @@ volatile unsigned int *gpio_get_cfg_reg(unsigned int gpio)
/*
* 获取指定gpio的EN寄存器
* @gpio gpio编号
* @ret EN寄存器
* 获取指定gpio的EN寄存器
* @gpio gpio编号
* @ret EN寄存器
*/
volatile unsigned int *gpio_get_en_reg(unsigned int gpio)
{
volatile unsigned int *gpio_enx = NULL; // GPIO_ENx寄存器
volatile unsigned int *gpio_enx = NULL; // GPIO_ENx寄存器
unsigned int port = GPIO_GET_PORT(gpio);
switch (port)
@@ -81,28 +89,28 @@ volatile unsigned int *gpio_get_en_reg(unsigned int gpio)
}
/*
* gpio初始化
* @gpio gpio引脚,取值范围[0, 127]
* @mode gpio的工作模式(输入、输出)
* gpio初始化
* @gpio gpio引脚,取值范围[0, 127]
* @mode gpio的工作模式(输入、输出)
*
* 例: 将gpio50初始化为输出
* 例: 将gpio50初始化为输出
* gpio_init(50, gpio_mode_output);
*/
void gpio_init(unsigned int gpio, gpio_mode_t mode)
{
volatile unsigned int *gpio_enx = NULL; // GPIO_ENx寄存器
volatile unsigned int *gpio_enx = NULL; // GPIO_ENx寄存器
unsigned int pin = GPIO_GET_PIN(gpio);
// 将pin设为普通GPIO
// 将pin设为普通GPIO
pin_set_purpose(gpio, PIN_PURPOSE_GPIO);
// 设置gpio工作模式(输入、输出)
// 设置gpio工作模式(输入、输出)
gpio_enx = gpio_get_en_reg(gpio);
if (gpio_mode_output == mode) // 输出
if (gpio_mode_output == mode) // 输出
{
reg_clr_one_bit(gpio_enx, pin);
}
else // 输入
else // 输入
{
reg_set_one_bit(gpio_enx, pin);
}
@@ -112,20 +120,20 @@ void gpio_init(unsigned int gpio, gpio_mode_t mode)
/*
* 在指定gpio输出高电平或低电平
* @gpio gpio引脚,取值范围[0, 127]
* @level 电平值
* 在指定gpio输出高电平或低电平
* @gpio gpio引脚,取值范围[0, 127]
* @level 电平值
*
* 例: 在gpio50上输出低电平
* 例: 在gpio50上输出低电平
* gpio_set(50, gpio_level_low);
*/
void gpio_set(unsigned int gpio, gpio_level_t level)
{
volatile unsigned int *gpio_outx = NULL; // GPIO_OUTx寄存器
volatile unsigned int *gpio_outx = NULL; // GPIO_OUTx寄存器
unsigned int port = GPIO_GET_PORT(gpio);
unsigned int pin = GPIO_GET_PIN(gpio);
// 获取寄存器地址
// 获取寄存器地址
switch (port)
{
case 0:
@@ -144,11 +152,11 @@ void gpio_set(unsigned int gpio, gpio_level_t level)
gpio_outx = (volatile unsigned int *)LS1C_GPIO_OUT3;
break;
default: // 正确的程序不应该走到这里,直接返回
default: // 正确的程序不应该走到这里,直接返回
return ;
}
// 输出
// 输出
if (gpio_level_low == level)
{
reg_clr_one_bit(gpio_outx, pin);
@@ -163,20 +171,20 @@ void gpio_set(unsigned int gpio, gpio_level_t level)
/*
* 读取指定gpio引脚的值
* @gpio gpio引脚,取值范围[0,127]
* 读取指定gpio引脚的值
* @gpio gpio引脚,取值范围[0,127]
*
* 例: 读取gpio50引脚上的值
* 例: 读取gpio50引脚上的值
* gpio_level_t level;
* level = gpio_get(50);
*/
unsigned int gpio_get(unsigned int gpio)
{
volatile unsigned int *gpio_inx = NULL; // GPIO_INx寄存器
volatile unsigned int *gpio_inx = NULL; // GPIO_INx寄存器
unsigned int port = GPIO_GET_PORT(gpio);
unsigned int pin = GPIO_GET_PIN(gpio);
// 获取寄存器地址
// 获取寄存器地址
switch (port)
{
case 0:
@@ -195,28 +203,28 @@ unsigned int gpio_get(unsigned int gpio)
gpio_inx = (volatile unsigned int *)LS1C_GPIO_IN3;
break;
default: // 正常的流程不应该走到这里,直接返回
default: // 正常的流程不应该走到这里,直接返回
return 0;
}
// 读取
// 读取
return reg_get_bit(gpio_inx, pin);
}
/**
* 设置中断类型
* @gpio gpio引脚
* @type 触发中断的条件。高电平触发、低电平触发、上升沿触发 or 下降沿触发
* 设置中断类型
* @gpio gpio引脚
* @type 触发中断的条件。高电平触发、低电平触发、上升沿触发 or 下降沿触发
*/
void gpio_set_irq_type(unsigned int gpio, gpio_irq_type_t type)
{
volatile unsigned int *int_pol = NULL; // 中断极性选择寄存器
volatile unsigned int *int_edge = NULL; // 中断边沿选择寄存器
volatile unsigned int *int_pol = NULL; // 中断极性选择寄存器
volatile unsigned int *int_edge = NULL; // 中断边沿选择寄存器
unsigned int port = GPIO_GET_PORT(gpio);
unsigned int pin = GPIO_GET_PIN(gpio);
// 获取寄存器地址
// 获取寄存器地址
switch (port)
{
case 0: // GPIO[31:0]
@@ -235,7 +243,7 @@ void gpio_set_irq_type(unsigned int gpio, gpio_irq_type_t type)
break;
}
// 设置中断类型
// 设置中断类型
switch (type)
{
case IRQ_TYPE_EDGE_RISING:
+9
View File
@@ -1,3 +1,12 @@
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2017-09-06 勤为本 first version
*/
#ifndef __OPENLOONGSON_GPIO_H
+2 -16
View File
@@ -1,21 +1,7 @@
/*
* File : ls1c_i2c.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
+2 -16
View File
@@ -1,21 +1,7 @@
/*
* File : ls1c_i2c.h
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
+10
View File
@@ -1,3 +1,13 @@
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2017-09-06 勤为本 first version
*/
// 引脚功能(普通gpio,pwm,复用等)相关接口
+10
View File
@@ -1,3 +1,13 @@
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2017-09-06 勤为本 first version
*/
// 引脚功能(普通gpio,pwm,复用等)相关接口
#ifndef __OPENLOONGSON_PIN_H
+10
View File
@@ -1,3 +1,13 @@
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2017-09-06 勤为本 first version
*/
// 一些常用的、共用的接口
/*
+34 -24
View File
@@ -1,4 +1,14 @@
// 一些常用的、共用的接口
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2017-09-06 勤为本 first version
*/
// 一些常用的、共用的接口
#ifndef __OPENLOONGSON_PUBLIC_H
#define __OPENLOONGSON_PUBLIC_H
@@ -7,7 +17,7 @@
#include <stdio.h>
// pmon提供的打印函数,见main()函数
// pmon提供的打印函数,见main()函数
struct callvectors {
int (*open) (char *, int, int);
int (*close) (int);
@@ -35,58 +45,58 @@ typedef enum
}BOOL;
/*
* 将指定寄存器的指定位置1
* @reg 寄存器地址
* @bit 需要置1的那一bit
* 将指定寄存器的指定位置1
* @reg 寄存器地址
* @bit 需要置1的那一bit
*/
void reg_set_one_bit(volatile unsigned int *reg, unsigned int bit);
/*
* 将指定寄存器的指定位清零
* @reg 寄存器地址
* @bit 需要清零的那一bit
* 将指定寄存器的指定位清零
* @reg 寄存器地址
* @bit 需要清零的那一bit
*/
void reg_clr_one_bit(volatile unsigned int *reg, unsigned int bit);
/*
* 获取指定寄存器的指定位的值
* @reg 寄存器地址
* @bit 需要读取值的那一bit
* @ret 指定位的值
* 获取指定寄存器的指定位的值
* @reg 寄存器地址
* @bit 需要读取值的那一bit
* @ret 指定位的值
*/
unsigned int reg_get_bit(volatile unsigned int *reg, unsigned int bit);
/*
* 向寄存器中写入8bit(一个字节)数据
* @data 待写入的数据
* @addr 寄存器地址
* 向寄存器中写入8bit(一个字节)数据
* @data 待写入的数据
* @addr 寄存器地址
*/
void reg_write_8(unsigned char data, volatile unsigned char *addr);
/*
* 从寄存器读出8bit(一个字节)数据
* @addr 寄存器地址
* @ret 读出的数据
* 从寄存器读出8bit(一个字节)数据
* @addr 寄存器地址
* @ret 读出的数据
*/
unsigned char reg_read_8(volatile unsigned char *addr);
/*
* 向寄存器中写一个32bit的数据
* @data 待写入的数据
* @addr 寄存器地址
* 向寄存器中写一个32bit的数据
* @data 待写入的数据
* @addr 寄存器地址
*/
void reg_write_32(unsigned int data, volatile unsigned int *addr);
/*
* 从寄存器读出一个32bit数据
* @addr 寄存器地址
* @ret 读出的数据
* 从寄存器读出一个32bit数据
* @addr 寄存器地址
* @ret 读出的数据
*/
unsigned int reg_read_32(volatile unsigned int *addr);
+10 -6
View File
@@ -1,3 +1,13 @@
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2017-09-06 勤为本 first version
*/
// 封装硬件pwm接口
#include "ls1c_public.h"
@@ -6,13 +16,9 @@
#include "ls1c_clock.h"
#include "ls1c_regs.h"
// pwm的最大周期
#define PWM_MAX_PERIOD (0xFFFFFF) // 计数器的值
/*
* 根据gpio获取相应pwm的基地址
* @gpio pwm引脚
@@ -193,5 +199,3 @@ void pwm_init(pwm_info_t *pwm_info)
return ;
}
+9
View File
@@ -1,3 +1,12 @@
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2017-09-06 勤为本 first version
*/
#ifndef __OPENLOONGSON_PWM_H
+12
View File
@@ -1,3 +1,13 @@
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2017-09-06 勤为本 first version
*/
// 龙芯1c外设寄存器
@@ -139,6 +149,8 @@
#define LS1C_UART10_BASE (0xbfe4ca00)
#define LS1C_UART11_BASE (0xbfe4cb00)
//RTC寄存器
#define LS1C_RTC_BASE (0xbfe64024)
#endif
+102
View File
@@ -0,0 +1,102 @@
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2018-05-06 sundm75 first version
*/
#include "ls1c.h"
#include "ls1c_public.h"
#include "ls1c_rtc.h"
#define LS1C_SEC_OFFSET (4)
#define LS1C_MIN_OFFSET (10)
#define LS1C_HOUR_OFFSET (16)
#define LS1C_DAY_OFFSET (21)
#define LS1C_MONTH_OFFSET (26)
#define LS1C_SEC_MASK (0x3f)
#define LS1C_MIN_MASK (0x3f)
#define LS1C_HOUR_MASK (0x1f)
#define LS1C_DAY_MASK (0x1f)
#define LS1C_MONTH_MASK (0x3f)
#define LS1C_YEAR_MASK (0xff)
#define ls1c_get_sec(t) (((t) >> LS1C_SEC_OFFSET) & LS1C_SEC_MASK)
#define ls1c_get_min(t) (((t) >> LS1C_MIN_OFFSET) & LS1C_MIN_MASK)
#define ls1c_get_hour(t) (((t) >> LS1C_HOUR_OFFSET) & LS1C_HOUR_MASK)
#define ls1c_get_day(t) (((t) >> LS1C_DAY_OFFSET) & LS1C_DAY_MASK)
#define ls1c_get_month(t) (((t) >> LS1C_MONTH_OFFSET) & LS1C_MONTH_MASK)
int RTC_SetTime(RTC_TypeDef *hrtc, RTC_TimeTypeDef *sTime)
{
hrtc->SYS_TOYWRITE0
= (sTime->Month << LS1C_MONTH_OFFSET)
| (sTime->Date << LS1C_DAY_OFFSET)
| (sTime->Hours << LS1C_HOUR_OFFSET)
| (sTime->Minutes << LS1C_MIN_OFFSET)
| (sTime->Seconds << LS1C_SEC_OFFSET);
hrtc->SYS_TOYWRITE1 = sTime->Year % 100;
printf("\r\ntoy_read0 = 0x%x, toy_read1 = 0x%x.\r\n", hrtc->SYS_TOYREAD0, hrtc->SYS_TOYREAD1);
return 0;
}
int RTC_GetTime(RTC_TypeDef *hrtc, RTC_TimeTypeDef *sTime)
{
unsigned long toy_read0, toy_read1;
toy_read0 = hrtc->SYS_TOYREAD0;
toy_read1 = hrtc->SYS_TOYREAD1;
sTime->Seconds = ls1c_get_sec(toy_read0);
sTime->Minutes = ls1c_get_min(toy_read0);
sTime->Hours = ls1c_get_hour(toy_read0);
sTime->Date = ls1c_get_day(toy_read0);
sTime->Month = ls1c_get_month(toy_read0);
sTime->Year = toy_read1 & LS1C_YEAR_MASK;
return 0 ;
}
unsigned char RTC_IsLeapYear(unsigned int nYear)
{
if((nYear % 4U) != 0U)
{
return 0U;
}
if((nYear % 100U) != 0U)
{
return 1U;
}
if((nYear % 400U) == 0U)
{
return 1U;
}
else
{
return 0U;
}
}
unsigned char RTC_WeekDayNum(unsigned long nYear, unsigned char nMonth, unsigned char nDay)
{
unsigned long year = 0U, weekday = 0U;
year = 2000U + nYear;
if(nMonth < 3U)
{
/*D = { [(23 x month)/9] + day + 4 + year + [(year-1)/4] - [(year-1)/100] + [(year-1)/400] } mod 7*/
weekday = (((23U * nMonth)/9U) + nDay + 4U + year + ((year-1U)/4U) - ((year-1U)/100U) + ((year-1U)/400U)) % 7U;
}
else
{
/*D = { [(23 x month)/9] + day + 4 + year + [year/4] - [year/100] + [year/400] - 2 } mod 7*/
weekday = (((23U * nMonth)/9U) + nDay + 4U + year + (year/4U) - (year/100U) + (year/400U) - 2U ) % 7U;
}
return (unsigned char)weekday;
}
+41
View File
@@ -0,0 +1,41 @@
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2018-05-06 sundm75 first version
*/
#ifndef __OPENLOONGSON_RTC_H
#define __OPENLOONGSON_RTC_H
#define RTC ( (RTC_TypeDef* )LS1C_RTC_BASE)
typedef struct
{
unsigned char Year; /*0 ~ 99 */
unsigned char Month; /*1 ~ 12 */
unsigned char Date; /*1 ~ 31 */
unsigned char Hours; /*0 ~ 23 */
unsigned char Minutes; /*0 ~ 59 */
unsigned char Seconds; /*0 ~ 59 */
}RTC_TimeTypeDef;
typedef struct
{
unsigned long SYS_TOYWRITE0;
unsigned long SYS_TOYWRITE1;
unsigned long SYS_TOYREAD0;
unsigned long SYS_TOYREAD1;
} RTC_TypeDef;
int RTC_SetTime(RTC_TypeDef *hrtc, RTC_TimeTypeDef *sTime);
int RTC_GetTime(RTC_TypeDef *hrtc, RTC_TimeTypeDef *sTime);
unsigned char RTC_IsLeapYear(unsigned int nYear);
unsigned char RTC_WeekDayNum(unsigned long nYear, unsigned char nMonth, unsigned char nDay);
#endif
+8 -23
View File
@@ -1,21 +1,7 @@
/*
* File : ls1c_spi.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
@@ -24,7 +10,6 @@
// 硬件spi接口源文件
#include <string.h>
#include "ls1c_public.h"
#include "ls1c_regs.h"
@@ -38,7 +23,7 @@
* 获取指定SPI模块的基地址
* @SPIx SPI模块的编号
*/
inline void *ls1c_spi_get_base(unsigned char SPIx)
void *ls1c_spi_get_base(unsigned char SPIx)
{
void *base = NULL;
@@ -67,7 +52,7 @@ inline void *ls1c_spi_get_base(unsigned char SPIx)
*/
void ls1c_spi_print_all_regs_info(void *spi_base)
{
rt_kprintf("[%s] SPCR=0x%x, SPSR=0x%x, SPER=0x%x, SFC_PARAM=0x%x, SFC_SOFTCS=0x%x, SFC_TIMING=0x%x\r\n",
printf("[%s] SPCR=0x%x, SPSR=0x%x, SPER=0x%x, SFC_PARAM=0x%x, SFC_SOFTCS=0x%x, SFC_TIMING=0x%x\r\n",
__FUNCTION__,
reg_read_8(spi_base + LS1C_SPI_SPCR_OFFSET),
reg_read_8(spi_base + LS1C_SPI_SPSR_OFFSET),
@@ -137,7 +122,7 @@ unsigned int ls1c_spi_get_div(unsigned int max_speed_hz)
break;
}
/*
rt_kprintf("[%s] clk=%ld, max_speed_hz=%d, div_tmp=%d, bit=%d\r\n",
printf("[%s] clk=%ld, max_speed_hz=%d, div_tmp=%d, bit=%d\r\n",
__FUNCTION__, clk, max_speed_hz, div_tmp, bit);
*/
return div_tmp;
@@ -229,7 +214,7 @@ void ls1c_spi_set_cs(void *spi_base, unsigned char cs, int new_status)
* 等待收发完成
* @spi_base 基地址
*/
inline void ls1c_spi_wait_txrx_done(void *spi_base)
void ls1c_spi_wait_txrx_done(void *spi_base)
{
int timeout = LS1C_SPI_TX_TIMEOUT;
@@ -247,7 +232,7 @@ inline void ls1c_spi_wait_txrx_done(void *spi_base)
* 清中断和标志位
* @spi_base 基地址
*/
inline void ls1c_spi_clear(void *spi_base)
void ls1c_spi_clear(void *spi_base)
{
unsigned char val = 0;
@@ -260,7 +245,7 @@ inline void ls1c_spi_clear(void *spi_base)
val = reg_read_8(spi_base + LS1C_SPI_SPSR_OFFSET);
if (LS1C_SPI_SPSR_WCOL_MASK & val)
{
rt_kprintf("[%s] clear register SPSR's wcol!\r\n",__FUNCTION__); // 手册和linux源码中不一样,加个打印看看
printf("[%s] clear register SPSR's wcol!\r\n"); // 手册和linux源码中不一样,加个打印看看
reg_write_8(val & ~LS1C_SPI_SPSR_WCOL_MASK, spi_base + LS1C_SPI_SPSR_OFFSET); // 写0,linux源码中是写0
// reg_write_8(val | LS1C_SPI_SPSR_WCOL_MASK, spi_base + LS1C_SPI_SPSR_OFFSET); // 写1,按照1c手册,应该写1
}
+44 -58
View File
@@ -1,61 +1,47 @@
/*
* File : ls1c_spi.h
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2017-10-23 勤为本 first version
* 2017-10-23 勤为本 first version
*/
// 硬件spi接口的头文件
// 硬件spi接口的头文件
#ifndef __OPENLOONGSON_SPI_H
#define __OPENLOONGSON_SPI_H
// SPI模块编号
// SPI模块编号
#define LS1C_SPI_0 (0)
#define LS1C_SPI_1 (1)
// 片选
// 片选
#define LS1C_SPI_CS_0 (0)
#define LS1C_SPI_CS_1 (1)
#define LS1C_SPI_CS_2 (2)
#define LS1C_SPI_CS_3 (3)
// 时钟极性和相位
// 时钟极性和相位
#define SPI_CPOL_1 (1)
#define SPI_CPOL_0 (0)
#define SPI_CPHA_1 (1)
#define SPI_CPHA_0 (0)
// 寄存器偏移
#define LS1C_SPI_SPCR_OFFSET (0) // 控制寄存器
#define LS1C_SPI_SPSR_OFFSET (1) // 状态寄存器
#define LS1C_SPI_TxFIFO_OFFSET (2) // 发送的数据寄存器,与接收数据寄存器的偏移相同
#define LS1C_SPI_RxFIFO_OFFSET (2) // 接收的数据寄存器,与发送数据寄存器的偏移相同
#define LS1C_SPI_SPER_OFFSET (3) // 外部寄存器
#define LS1C_SPI_SFC_PARAM_OFFSET (4) // 参数控制寄存器
#define LS1C_SPI_SFC_SOFTCS_OFFSET (5) // 片选控制寄存器
#define LS1C_SPI_SFC_TIMING_OFFSET (6) // 时序控制寄存器
// 寄存器偏移
#define LS1C_SPI_SPCR_OFFSET (0) // 控制寄存器
#define LS1C_SPI_SPSR_OFFSET (1) // 状态寄存器
#define LS1C_SPI_TxFIFO_OFFSET (2) // 发送的数据寄存器,与接收数据寄存器的偏移相同
#define LS1C_SPI_RxFIFO_OFFSET (2) // 接收的数据寄存器,与发送数据寄存器的偏移相同
#define LS1C_SPI_SPER_OFFSET (3) // 外部寄存器
#define LS1C_SPI_SFC_PARAM_OFFSET (4) // 参数控制寄存器
#define LS1C_SPI_SFC_SOFTCS_OFFSET (5) // 片选控制寄存器
#define LS1C_SPI_SFC_TIMING_OFFSET (6) // 时序控制寄存器
// 寄存器SPCR中的位域
// 寄存器SPCR中的位域
#define LS1C_SPI_SPCR_SPIE_BIT (7)
#define LS1C_SPI_SPCR_SPIE_MASK (0x01 << LS1C_SPI_SPCR_SPIE_BIT)
#define LS1C_SPI_SPCR_SPE_BIT (6)
@@ -67,75 +53,75 @@
#define LS1C_SPI_SPCR_SPR_BIT (0)
#define LS1C_SPI_SPCR_SPR_MASK (0x03 << LS1C_SPI_SPCR_SPR_BIT)
// 寄存器SPSR中的位域
// 寄存器SPSR中的位域
#define LS1C_SPI_SPSR_SPIF_BIT (7)
#define LS1C_SPI_SPSR_SPIF_MASK (0x01 << LS1C_SPI_SPSR_SPIF_BIT)
#define LS1C_SPI_SPSR_WCOL_BIT (6)
#define LS1C_SPI_SPSR_WCOL_MASK (0x01 << LS1C_SPI_SPSR_WCOL_BIT)
// 寄存器SPER中的位域
// 寄存器SPER中的位域
#define LS1C_SPI_SPER_SPRE_BIT (0)
#define LS1C_SPI_SPER_SPRE_MASK (0x3 << LS1C_SPI_SPER_SPRE_BIT)
// 寄存器SFC_SOFTCS的位域
// 寄存器SFC_SOFTCS的位域
#define LS1C_SPI_SFC_SOFTCS_CSN_BIT (4)
#define LS1C_SPI_SFC_SOFTCS_CSN_MASK (0x0f << LS1C_SPI_SFC_SOFTCS_CSN_BIT)
#define LS1C_SPI_SFC_SOFTCS_CSEN_BIT (0)
#define LS1C_SPI_SFC_SOFTCS_CSEN_MASK (0x0f << LS1C_SPI_SFC_SOFTCS_CSEN_BIT)
// 发送超时的门限值
// 发送超时的门限值
#define LS1C_SPI_TX_TIMEOUT (20000)
/*
* 获取指定SPI模块的基地址
* @SPIx SPI模块的编号
* 获取指定SPI模块的基地址
* @SPIx SPI模块的编号
*/
inline void *ls1c_spi_get_base(unsigned char SPIx);
void *ls1c_spi_get_base(unsigned char SPIx);
/*
* 设置时钟
* @spi_base 基地址
* @max_hz 最大频率,单位hz
* 设置时钟
* @spi_base 基地址
* @max_hz 最大频率,单位hz
*/
void ls1c_spi_set_clock(void *spi_base, unsigned long max_hz);
/*
* 设置通信模式(时钟极性和相位)
* @spi_base 基地址
* @cpol 时钟极性
* @cpha 时钟相位
* 设置通信模式(时钟极性和相位)
* @spi_base 基地址
* @cpol 时钟极性
* @cpha 时钟相位
*/
void ls1c_spi_set_mode(void *spi_base, unsigned char cpol, unsigned char cpha);
/*
* 设置指定片选为指定状态
* @spi_base 基地址
* @cs 片选
* @new_status 片选引脚的新状态,取值为0或1,即高电平或低电平
* 设置指定片选为指定状态
* @spi_base 基地址
* @cs 片选
* @new_status 片选引脚的新状态,取值为0或1,即高电平或低电平
*/
void ls1c_spi_set_cs(void *spi_base, unsigned char cs, int new_status);
/*
* 通过指定SPI发送接收一个字节
* 注意,在多任务的系统中,此函数需要互斥。
* 即保证在和某个从设备收发某个字节的过程中,不能被切换到其它任务同时与另外的在同一个SPI总线上的从设备通信
* 因为龙芯1c的每路SPI上可能接有不同的从设备,通信频率、模式等可能不同
* @spi_base 基地址
* @tx_ch 待发送的数据
* @ret 收到的数据
* 通过指定SPI发送接收一个字节
* 注意,在多任务的系统中,此函数需要互斥。
* 即保证在和某个从设备收发某个字节的过程中,不能被切换到其它任务同时与另外的在同一个SPI总线上的从设备通信
* 因为龙芯1c的每路SPI上可能接有不同的从设备,通信频率、模式等可能不同
* @spi_base 基地址
* @tx_ch 待发送的数据
* @ret 收到的数据
*/
unsigned char ls1c_spi_txrx_byte(void *spi_base, unsigned char tx_ch);
/*
* 打印指定SPI模块的所有寄存器的值
* @spi_base 基地址
* 打印指定SPI模块的所有寄存器的值
* @spi_base 基地址
*/
void ls1c_spi_print_all_regs_info(void *spi_base);
+108 -7
View File
@@ -1,6 +1,15 @@
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* first version
*/
// 硬件定时器源码
#include <ls1c.h>
#include "ls1c_public.h"
#include "ls1c_pin.h"
#include "ls1c_clock.h"
@@ -147,8 +156,6 @@ void timer_stop(timer_info_t *timer_info)
return ;
}
/*
* 获取定时器从初始化到现在的时间(实现计时功能),单位ns
* @timer_info 硬件定时器
@@ -172,13 +179,11 @@ unsigned long timer_get_time_ns(timer_info_t *timer_info)
*/
timer_clk = clk_get_apb_rate();
time_ns = (cntr * 1000 ) / (timer_clk /1000000);
// rt_kprintf("[%s] time_us=%lu, cntr=%d, timer_clk=%d\n", __FUNCTION__, time_ns, cntr, timer_clk);
// printf("[%s] time_us=%lu, cntr=%d, timer_clk=%d\n", __FUNCTION__, time_ns, cntr, timer_clk);
return time_ns;
}
/*
* 打印timer相关寄存器的值
* @timer_info 硬件定时器
@@ -188,7 +193,7 @@ void timer_print_regs(timer_info_t *timer_info)
unsigned int timer_reg_base = 0;
timer_reg_base = timer_get_reg_base(timer_info->timer);
rt_kprintf("CNTR=0x%x, HRC=0x%x, LRC=0x%x, CTRL=0x%x\n",
printf("CNTR=0x%x, HRC=0x%x, LRC=0x%x, CTRL=0x%x\n",
reg_read_32((volatile unsigned int *)(timer_reg_base + LS1C_PWM_CNTR)),
reg_read_32((volatile unsigned int *)(timer_reg_base + LS1C_PWM_HRC)),
reg_read_32((volatile unsigned int *)(timer_reg_base + LS1C_PWM_LRC)),
@@ -197,4 +202,100 @@ void timer_print_regs(timer_info_t *timer_info)
return ;
}
/*
* 定时器中断清
* @timer_info 定时器信息
*/
void timer_int_clr(timer_info_t *timer_info)
{
unsigned int timer_reg_base = 0; // 寄存器基地址
unsigned int ctrl ;
// 判断入参
if (NULL == timer_info)
{
return ;
}
timer_reg_base = timer_get_reg_base(timer_info->timer); // 获取寄存器基地址
ctrl = reg_read_32((volatile unsigned int *)(timer_reg_base + LS1C_PWM_CTRL));
ctrl = ctrl | (1<<LS1C_PWM_INT_SR) ;
reg_write_32(ctrl , (volatile unsigned int *)(timer_reg_base + LS1C_PWM_CTRL));
ctrl = ctrl & (~(1<<LS1C_PWM_INT_SR)) ;
reg_write_32(ctrl , (volatile unsigned int *)(timer_reg_base + LS1C_PWM_CTRL));
return ;
}
/*
* 定时器计数清
* @timer_info 定时器信息
*/
void timer_cnt_clr(timer_info_t *timer_info)
{
unsigned int timer_reg_base = 0; // 寄存器基地址
unsigned int ctrl ;
// 判断入参
if (NULL == timer_info)
{
return ;
}
timer_reg_base = timer_get_reg_base(timer_info->timer); // 获取寄存器基地址
ctrl = reg_read_32((volatile unsigned int *)(timer_reg_base + LS1C_PWM_CTRL));
ctrl = ctrl | (1<<LS1C_PWM_CNTR_RST);
reg_write_32(ctrl , (volatile unsigned int *)(timer_reg_base + LS1C_PWM_CTRL));
ctrl = ctrl & (~(1<<LS1C_PWM_CNTR_RST)) ;
reg_write_32(ctrl , (volatile unsigned int *)(timer_reg_base + LS1C_PWM_CTRL));
return ;
}
/*
* 初始化定时器,并开始中断定时
* @timer_info 定时器和定时时间信息
* @hrc 高中断 lrc 低中断 为1打开,为0关闭
*/
void timer_int_init(timer_info_t *timer_info, int hrc, int lrc)
{
unsigned int timer_reg_base = 0; // 寄存器基地址
unsigned long timer_clk = 0; // 硬件定时器的时钟
unsigned long h_value, l_value;
unsigned int ctrl = 0; // 控制寄存器中的控制信息
// 判断入参
if (NULL == timer_info)
{
return ;
}
/*
* 把定时时间换算为计数器的值
* 计数器值 = 定时器的时钟 * 定时时间(单位ns) / 1000000000
* 龙芯1c的定时器时钟为APB时钟,达到126Mhz,
* 为避免计算过程发生溢出,这里采用手动优化上面的计算式,也可以采用浮点运算
*/
timer_clk = clk_get_apb_rate();
l_value = (timer_clk / 1000000) * (timer_info->time_ns / 1000); // 将1000000000拆分为1000000和1000
l_value = MIN(l_value, TIMER_COUNTER_MAX);
h_value = (timer_clk / 1000000) * (timer_info->time_h_ns / 1000); // 将1000000000拆分为1000000和1000
h_value = MIN(h_value, l_value);
// 控制寄存器信息
ctrl = (lrc << LS1C_PWM_INT_LRC_EN)
| (hrc << LS1C_PWM_INT_HRC_EN)
| (0 << LS1C_PWM_CNTR_RST)
| (0 << LS1C_PWM_INT_SR)
| (1 << LS1C_PWM_INTEN)
| (1 << LS1C_PWM_SINGLE)
| (1 << LS1C_PWM_OE)
| (1 << LS1C_PWM_CNT_EN);
// 设置各个寄存器
timer_reg_base = timer_get_reg_base(timer_info->timer); // 获取寄存器基地址
reg_write_32(0, (volatile unsigned int *)(timer_reg_base + LS1C_PWM_HRC));
reg_write_32(l_value--, (volatile unsigned int *)(timer_reg_base + LS1C_PWM_LRC));
reg_write_32(h_value--, (volatile unsigned int *)(timer_reg_base + LS1C_PWM_HRC));
reg_write_32(0, (volatile unsigned int *)(timer_reg_base + LS1C_PWM_CNTR));
reg_write_32(ctrl, (volatile unsigned int *)(timer_reg_base + LS1C_PWM_CTRL));
return ;
}
+28 -8
View File
@@ -1,3 +1,12 @@
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* first version
*/
// 硬件定时器头文件
@@ -22,18 +31,16 @@ typedef enum
typedef struct
{
ls1c_timer_t timer; // 硬件定时器
unsigned long time_ns; // 定时时间
unsigned long time_ns; // 低定时时间
unsigned long time_h_ns; // 高定时时间
}timer_info_t;
/*
* 初始化定时器,并开始定时
* @timer_info 定时器和定时时间信息
*/
void timer_init(timer_info_t *timer_info);
/*
* 判断指定定时器是否超时
* @timer_info 定时器
@@ -41,15 +48,12 @@ void timer_init(timer_info_t *timer_info);
*/
BOOL timer_is_time_out(timer_info_t *timer_info);
/*
* 停止定时器
* @timer_info 定时器
*/
void timer_stop(timer_info_t *timer_info);
/*
* 获取定时器从初始化到现在的时间(实现计时功能),单位ns
* @timer_info 硬件定时器
@@ -57,13 +61,29 @@ void timer_stop(timer_info_t *timer_info);
*/
unsigned long timer_get_time_ns(timer_info_t *timer_info);
/*
* 打印timer相关寄存器的值
* @timer_info 硬件定时器
*/
void timer_print_regs(timer_info_t *timer_info);
/*
* 定时器中断清
* @timer_info 定时器信息
*/
void timer_int_clr(timer_info_t *timer_info);
/*
* 定时器计数清
* @timer_info 定时器信息
*/
void timer_cnt_clr(timer_info_t *timer_info);
/*
* 初始化定时器,并开始中断定时
* @timer_info 定时器和定时时间信息
* @hrc 高中断 lrc 低中断 为1打开,为0关闭
*/
void timer_int_init(timer_info_t *timer_info, int hrc, int lrc);
#endif
+9
View File
@@ -1,3 +1,12 @@
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* first version
*/
// 串口相关源码
#include <stdio.h>
+9
View File
@@ -1,3 +1,12 @@
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* first version
*/
// 串口相关头文件