Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
BaiXuePrincess
rt-thread
提交
203707e5
R
rt-thread
项目概览
BaiXuePrincess
/
rt-thread
与 Fork 源项目一致
Fork自
RT-Thread / rt-thread
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rt-thread
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
203707e5
编写于
2月 21, 2013
作者:
wuyangyong
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #32 from aozima/pulls
Pulls
上级
4e7247e0
8a8f904e
变更
26
展开全部
隐藏空白更改
内联
并排
Showing
26 changed file
with
2759 addition
and
1495 deletion
+2759
-1495
bsp/mini2440/calibration.c
bsp/mini2440/calibration.c
+298
-0
bsp/stm32f107/SConstruct
bsp/stm32f107/SConstruct
+2
-7
bsp/stm32f107/applications/application.c
bsp/stm32f107/applications/application.c
+21
-44
bsp/stm32f107/applications/startup.c
bsp/stm32f107/applications/startup.c
+36
-52
bsp/stm32f107/drivers/SConscript
bsp/stm32f107/drivers/SConscript
+9
-0
bsp/stm32f107/drivers/board.c
bsp/stm32f107/drivers/board.c
+13
-34
bsp/stm32f107/drivers/board.h
bsp/stm32f107/drivers/board.h
+3
-18
bsp/stm32f107/drivers/msd.c
bsp/stm32f107/drivers/msd.c
+1603
-863
bsp/stm32f107/drivers/msd.h
bsp/stm32f107/drivers/msd.h
+122
-163
bsp/stm32f107/drivers/platform.c
bsp/stm32f107/drivers/platform.c
+102
-0
bsp/stm32f107/drivers/rt_stm32f10x_spi.c
bsp/stm32f107/drivers/rt_stm32f10x_spi.c
+372
-0
bsp/stm32f107/drivers/rt_stm32f10x_spi.h
bsp/stm32f107/drivers/rt_stm32f10x_spi.h
+38
-0
bsp/stm32f107/drivers/stm32f10x_it.c
bsp/stm32f107/drivers/stm32f10x_it.c
+4
-10
bsp/stm32f107/drivers/usart.c
bsp/stm32f107/drivers/usart.c
+1
-0
bsp/stm32f107/project.uvproj
bsp/stm32f107/project.uvproj
+97
-245
bsp/stm32f107/readme.txt
bsp/stm32f107/readme.txt
+1
-1
bsp/stm32f107/rtconfig.h
bsp/stm32f107/rtconfig.h
+9
-2
bsp/stm32f107/template.uvproj
bsp/stm32f107/template.uvproj
+4
-4
bsp/stm32f10x/project.Uv2
bsp/stm32f10x/project.Uv2
+4
-8
bsp/stm32f10x/template.Uv2
bsp/stm32f10x/template.Uv2
+3
-3
bsp/stm32f10x/template.uvproj
bsp/stm32f10x/template.uvproj
+4
-4
bsp/stm32f20x/applications/startup.c
bsp/stm32f20x/applications/startup.c
+0
-3
bsp/stm32f20x/project.uvproj
bsp/stm32f20x/project.uvproj
+5
-19
bsp/stm32f20x/template.uvproj
bsp/stm32f20x/template.uvproj
+4
-4
bsp/stm32f40x/project.uvproj
bsp/stm32f40x/project.uvproj
+2
-9
bsp/stm32f40x/template.uvproj
bsp/stm32f40x/template.uvproj
+2
-2
未找到文件。
bsp/mini2440/calibration.c
0 → 100644
浏览文件 @
203707e5
#include <rtgui/rtgui.h>
#include <rtgui/dc.h>
#include <rtgui/rtgui_system.h>
#include <rtgui/widgets/window.h>
#include <rtgui/rtgui_app.h>
#include "touch.h"
#define CALIBRATION_STEP_LEFTTOP 0
#define CALIBRATION_STEP_RIGHTTOP 1
#define CALIBRATION_STEP_RIGHTBOTTOM 2
#define CALIBRATION_STEP_LEFTBOTTOM 3
#define CALIBRATION_STEP_CENTER 4
#define TOUCH_WIN_UPDATE 1
#define TOUCH_WIN_CLOSE 2
#define CALIBRATION_WIDTH 15
#define CALIBRATION_HEIGHT 15
struct
calibration_session
{
rt_uint8_t
step
;
struct
calibration_data
data
;
rt_uint16_t
width
;
rt_uint16_t
height
;
rt_device_t
device
;
rt_thread_t
tid
;
struct
rtgui_win
*
wid
;
};
static
struct
calibration_session
*
calibration_ptr
=
RT_NULL
;
static
void
calibration_data_post
(
rt_uint16_t
x
,
rt_uint16_t
y
)
{
if
(
calibration_ptr
!=
RT_NULL
)
{
switch
(
calibration_ptr
->
step
)
{
case
CALIBRATION_STEP_LEFTTOP
:
calibration_ptr
->
data
.
min_x
=
x
;
calibration_ptr
->
data
.
min_y
=
y
;
break
;
case
CALIBRATION_STEP_RIGHTTOP
:
calibration_ptr
->
data
.
max_x
=
x
;
calibration_ptr
->
data
.
min_y
=
(
calibration_ptr
->
data
.
min_y
+
y
)
/
2
;
break
;
case
CALIBRATION_STEP_LEFTBOTTOM
:
calibration_ptr
->
data
.
min_x
=
(
calibration_ptr
->
data
.
min_x
+
x
)
/
2
;
calibration_ptr
->
data
.
max_y
=
y
;
break
;
case
CALIBRATION_STEP_RIGHTBOTTOM
:
calibration_ptr
->
data
.
max_x
=
(
calibration_ptr
->
data
.
max_x
+
x
)
/
2
;
calibration_ptr
->
data
.
max_y
=
(
calibration_ptr
->
data
.
max_y
+
y
)
/
2
;
break
;
case
CALIBRATION_STEP_CENTER
:
/* calibration done */
{
rt_uint16_t
w
,
h
;
struct
rtgui_event_command
ecmd
;
RTGUI_EVENT_COMMAND_INIT
(
&
ecmd
);
ecmd
.
command_id
=
TOUCH_WIN_CLOSE
;
ecmd
.
wid
=
calibration_ptr
->
wid
;
/* calculate calibrated data */
if
(
calibration_ptr
->
data
.
max_x
>
calibration_ptr
->
data
.
min_x
)
w
=
calibration_ptr
->
data
.
max_x
-
calibration_ptr
->
data
.
min_x
;
else
w
=
calibration_ptr
->
data
.
min_x
-
calibration_ptr
->
data
.
max_x
;
w
=
(
w
/
(
calibration_ptr
->
width
-
2
*
CALIBRATION_WIDTH
))
*
CALIBRATION_WIDTH
;
if
(
calibration_ptr
->
data
.
max_y
>
calibration_ptr
->
data
.
min_y
)
h
=
calibration_ptr
->
data
.
max_y
-
calibration_ptr
->
data
.
min_y
;
else
h
=
calibration_ptr
->
data
.
min_y
-
calibration_ptr
->
data
.
max_y
;
h
=
(
h
/
(
calibration_ptr
->
height
-
2
*
CALIBRATION_HEIGHT
))
*
CALIBRATION_HEIGHT
;
rt_kprintf
(
"w: %d, h: %d
\n
"
,
w
,
h
);
if
(
calibration_ptr
->
data
.
max_x
>
calibration_ptr
->
data
.
min_x
)
{
calibration_ptr
->
data
.
min_x
-=
w
;
calibration_ptr
->
data
.
max_x
+=
w
;
}
else
{
calibration_ptr
->
data
.
min_x
+=
w
;
calibration_ptr
->
data
.
max_x
-=
w
;
}
if
(
calibration_ptr
->
data
.
max_y
>
calibration_ptr
->
data
.
min_y
)
{
calibration_ptr
->
data
.
min_y
-=
h
;
calibration_ptr
->
data
.
max_y
+=
h
;
}
else
{
calibration_ptr
->
data
.
min_y
+=
h
;
calibration_ptr
->
data
.
max_y
-=
h
;
}
rt_kprintf
(
"calibration data: (%d, %d), (%d, %d)
\n
"
,
calibration_ptr
->
data
.
min_x
,
calibration_ptr
->
data
.
max_x
,
calibration_ptr
->
data
.
min_y
,
calibration_ptr
->
data
.
max_y
);
rtgui_send
(
calibration_ptr
->
tid
,
&
ecmd
.
parent
,
sizeof
(
struct
rtgui_event_command
));
}
return
;
}
calibration_ptr
->
step
++
;
/* post command event */
{
struct
rtgui_event_command
ecmd
;
RTGUI_EVENT_COMMAND_INIT
(
&
ecmd
);
ecmd
.
command_id
=
TOUCH_WIN_UPDATE
;
ecmd
.
wid
=
calibration_ptr
->
wid
;
rtgui_send
(
calibration_ptr
->
tid
,
&
ecmd
.
parent
,
sizeof
(
struct
rtgui_event_command
));
}
}
}
rt_bool_t
calibration_event_handler
(
struct
rtgui_object
*
object
,
struct
rtgui_event
*
event
)
{
struct
rtgui_widget
*
widget
;
widget
=
RTGUI_WIDGET
(
object
);
switch
(
event
->
type
)
{
case
RTGUI_EVENT_PAINT
:
{
struct
rtgui_dc
*
dc
;
struct
rtgui_rect
rect
;
dc
=
rtgui_dc_begin_drawing
(
widget
);
if
(
dc
==
RT_NULL
)
break
;
/* get rect information */
rtgui_widget_get_rect
(
widget
,
&
rect
);
/* clear whole window */
RTGUI_WIDGET_BACKGROUND
(
widget
)
=
white
;
rtgui_dc_fill_rect
(
dc
,
&
rect
);
/* reset color */
RTGUI_WIDGET_BACKGROUND
(
widget
)
=
green
;
RTGUI_WIDGET_FOREGROUND
(
widget
)
=
black
;
switch
(
calibration_ptr
->
step
)
{
case
CALIBRATION_STEP_LEFTTOP
:
rtgui_dc_draw_hline
(
dc
,
0
,
2
*
CALIBRATION_WIDTH
,
CALIBRATION_HEIGHT
);
rtgui_dc_draw_vline
(
dc
,
CALIBRATION_WIDTH
,
0
,
2
*
CALIBRATION_HEIGHT
);
RTGUI_WIDGET_FOREGROUND
(
widget
)
=
red
;
rtgui_dc_fill_circle
(
dc
,
CALIBRATION_WIDTH
,
CALIBRATION_HEIGHT
,
4
);
break
;
case
CALIBRATION_STEP_RIGHTTOP
:
rtgui_dc_draw_hline
(
dc
,
calibration_ptr
->
width
-
2
*
CALIBRATION_WIDTH
,
calibration_ptr
->
width
,
CALIBRATION_HEIGHT
);
rtgui_dc_draw_vline
(
dc
,
calibration_ptr
->
width
-
CALIBRATION_WIDTH
,
0
,
2
*
CALIBRATION_HEIGHT
);
RTGUI_WIDGET_FOREGROUND
(
widget
)
=
red
;
rtgui_dc_fill_circle
(
dc
,
calibration_ptr
->
width
-
CALIBRATION_WIDTH
,
CALIBRATION_HEIGHT
,
4
);
break
;
case
CALIBRATION_STEP_LEFTBOTTOM
:
rtgui_dc_draw_hline
(
dc
,
0
,
2
*
CALIBRATION_WIDTH
,
calibration_ptr
->
height
-
CALIBRATION_HEIGHT
);
rtgui_dc_draw_vline
(
dc
,
CALIBRATION_WIDTH
,
calibration_ptr
->
height
-
2
*
CALIBRATION_HEIGHT
,
calibration_ptr
->
height
);
RTGUI_WIDGET_FOREGROUND
(
widget
)
=
red
;
rtgui_dc_fill_circle
(
dc
,
CALIBRATION_WIDTH
,
calibration_ptr
->
height
-
CALIBRATION_HEIGHT
,
4
);
break
;
case
CALIBRATION_STEP_RIGHTBOTTOM
:
rtgui_dc_draw_hline
(
dc
,
calibration_ptr
->
width
-
2
*
CALIBRATION_WIDTH
,
calibration_ptr
->
width
,
calibration_ptr
->
height
-
CALIBRATION_HEIGHT
);
rtgui_dc_draw_vline
(
dc
,
calibration_ptr
->
width
-
CALIBRATION_WIDTH
,
calibration_ptr
->
height
-
2
*
CALIBRATION_HEIGHT
,
calibration_ptr
->
height
);
RTGUI_WIDGET_FOREGROUND
(
widget
)
=
red
;
rtgui_dc_fill_circle
(
dc
,
calibration_ptr
->
width
-
CALIBRATION_WIDTH
,
calibration_ptr
->
height
-
CALIBRATION_HEIGHT
,
4
);
break
;
case
CALIBRATION_STEP_CENTER
:
rtgui_dc_draw_hline
(
dc
,
calibration_ptr
->
width
/
2
-
CALIBRATION_WIDTH
,
calibration_ptr
->
width
/
2
+
CALIBRATION_WIDTH
,
calibration_ptr
->
height
/
2
);
rtgui_dc_draw_vline
(
dc
,
calibration_ptr
->
width
/
2
,
calibration_ptr
->
height
/
2
-
CALIBRATION_HEIGHT
,
calibration_ptr
->
height
/
2
+
CALIBRATION_HEIGHT
);
RTGUI_WIDGET_FOREGROUND
(
widget
)
=
red
;
rtgui_dc_fill_circle
(
dc
,
calibration_ptr
->
width
/
2
,
calibration_ptr
->
height
/
2
,
4
);
break
;
}
rtgui_dc_end_drawing
(
dc
);
}
break
;
case
RTGUI_EVENT_COMMAND
:
{
struct
rtgui_event_command
*
ecmd
=
(
struct
rtgui_event_command
*
)
event
;
switch
(
ecmd
->
command_id
)
{
case
TOUCH_WIN_UPDATE
:
rtgui_widget_update
(
widget
);
break
;
case
TOUCH_WIN_CLOSE
:
rtgui_win_close
(
RTGUI_WIN
(
widget
));
break
;
}
}
return
RT_TRUE
;
default:
rtgui_win_event_handler
(
RTGUI_OBJECT
(
widget
),
event
);
break
;
}
return
RT_FALSE
;
}
void
calibration_entry
(
void
*
parameter
)
{
struct
rtgui_app
*
app
;
struct
rtgui_win
*
win
;
struct
rtgui_rect
rect
;
app
=
rtgui_app_create
(
rt_thread_self
(),
"cali"
);
if
(
app
==
RT_NULL
)
return
;
rtgui_graphic_driver_get_rect
(
rtgui_graphic_driver_get_default
(),
&
rect
);
/* set screen rect */
calibration_ptr
->
width
=
rect
.
x2
;
calibration_ptr
->
height
=
rect
.
y2
;
/* create calibration window */
win
=
rtgui_win_create
(
RT_NULL
,
"calibration"
,
&
rect
,
RTGUI_WIN_STYLE_NO_TITLE
|
RTGUI_WIN_STYLE_NO_BORDER
);
if
(
win
==
RT_NULL
)
{
rtgui_app_destroy
(
app
);
return
;
}
calibration_ptr
->
wid
=
win
;
rtgui_object_set_event_handler
(
RTGUI_OBJECT
(
win
),
calibration_event_handler
);
rtgui_win_show
(
win
,
RT_TRUE
);
rtgui_win_destroy
(
win
);
rtgui_app_destroy
(
app
);
/* set calibration data */
rt_device_control
(
calibration_ptr
->
device
,
RT_TOUCH_CALIBRATION_DATA
,
&
calibration_ptr
->
data
);
/* recover to normal */
rt_device_control
(
calibration_ptr
->
device
,
RT_TOUCH_NORMAL
,
RT_NULL
);
/* release memory */
rt_free
(
calibration_ptr
);
calibration_ptr
=
RT_NULL
;
}
void
calibration_init
(
void
)
{
rt_device_t
device
;
device
=
rt_device_find
(
"touch"
);
if
(
device
==
RT_NULL
)
return
;
calibration_ptr
=
(
struct
calibration_session
*
)
rt_malloc
(
sizeof
(
struct
calibration_session
));
rt_memset
(
calibration_ptr
,
0
,
sizeof
(
struct
calibration_data
));
calibration_ptr
->
device
=
device
;
rt_device_control
(
calibration_ptr
->
device
,
RT_TOUCH_CALIBRATION
,
(
void
*
)
calibration_data_post
);
calibration_ptr
->
tid
=
rt_thread_create
(
"cali"
,
calibration_entry
,
RT_NULL
,
2048
,
20
,
5
);
if
(
calibration_ptr
->
tid
!=
RT_NULL
)
rt_thread_startup
(
calibration_ptr
->
tid
);
}
#ifdef RT_USING_FINSH
#include <finsh.h>
void
calibration
(
void
)
{
calibration_init
();
}
FINSH_FUNCTION_EXPORT
(
calibration
,
perform
touch
calibration
);
#endif
bsp/stm32f107/SConstruct
浏览文件 @
203707e5
...
...
@@ -28,10 +28,5 @@ Export('RTT_ROOT')
Export
(
'rtconfig'
)
# prepare building environment
objs
=
PrepareBuilding
(
env
,
RTT_ROOT
,
has_libcpu
=
False
)
# build program
env
.
Program
(
TARGET
,
objs
)
# end building
EndBuilding
(
TARGET
)
objs
=
PrepareBuilding
(
env
,
RTT_ROOT
)
DoBuilding
(
TARGET
,
objs
)
bsp/stm32f107/applications/application.c
浏览文件 @
203707e5
/*
* File : application.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006, RT-Thread Development Team
* COPYRIGHT (C) 2006
- 2013
, RT-Thread Development Team
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
...
...
@@ -21,67 +21,42 @@
#include <rtthread.h>
#ifdef RT_USING_DFS
/* dfs init */
#include <dfs_init.h>
/* dfs filesystem:ELM filesystem init */
#include <dfs_elm.h>
/* dfs Filesystem APIs */
#include <dfs_fs.h>
#endif
#ifdef RT_USING_LWIP
#include <lwip/sys.h>
#include <lwip/api.h>
#include <netif/ethernetif.h>
#include "stm32_eth.h"
#endif
#ifdef RT_USING_COMPONENTS_INIT
#include <components.h>
#endif
/* RT_USING_COMPONENTS_INIT */
void
rt_init_thread_entry
(
void
*
parameter
)
{
/* Filesystem Initialization */
#ifdef RT_USING_DFS
{
/* init the device filesystem */
dfs_init
();
#ifdef RT_USING_DFS_ELMFAT
/* init the elm chan FatFs filesystam*/
elm_init
();
{
extern
void
rt_platform_init
(
void
);
rt_platform_init
();
}
/* init sdcard driver */
rt_hw_msd_init
();
#ifdef RT_USING_COMPONENTS_INIT
/* initialization RT-Thread Components */
rt_components_init
();
#endif
/* Filesystem Initialization */
#if defined(RT_USING_DFS) && defined(RT_USING_DFS_ELMFAT)
{
/* mount sd card fat partition 1 as root directory */
if
(
dfs_mount
(
"sd0"
,
"/"
,
"elm"
,
0
,
0
)
==
0
)
{
rt_kprintf
(
"File System initialized!
\n
"
);
}
else
{
rt_kprintf
(
"File System initialzation failed!
\n
"
);
#endif
}
#endif
/* LwIP Initialization */
#ifdef RT_USING_LWIP
{
extern
void
lwip_sys_init
(
void
);
/* register ethernetif device */
eth_system_device_init
();
rt_hw_stm32_eth_init
();
/* re-init device driver */
rt_device_init_all
();
/* init lwip system */
lwip_sys_init
();
rt_kprintf
(
"TCP/IP initialized!
\n
"
);
}
}
#endif
#endif
/* RT_USING_DFS && RT_USING_DFS_ELMFAT */
}
int
rt_application_init
()
int
rt_application_init
(
void
)
{
rt_thread_t
init_thread
;
...
...
@@ -96,7 +71,9 @@ int rt_application_init()
#endif
if
(
init_thread
!=
RT_NULL
)
{
rt_thread_startup
(
init_thread
);
}
return
0
;
}
...
...
bsp/stm32f107/applications/startup.c
浏览文件 @
203707e5
/*
* File : startup.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006, RT-Thread Develop Team
* COPYRIGHT (C) 2006
- 2013
, RT-Thread Develop Team
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
...
...
@@ -15,8 +15,6 @@
#include <rthw.h>
#include <rtthread.h>
#include "stm32f10x.h"
#include "board.h"
/**
...
...
@@ -26,17 +24,16 @@
/*@{*/
extern
int
rt_application_init
(
void
);
#ifdef RT_USING_FINSH
extern
void
finsh_system_init
(
void
);
extern
void
finsh_set_device
(
const
char
*
device
);
#endif
#ifdef __CC_ARM
extern
int
Image
$$
RW_IRAM1
$$
ZI
$$
Limit
;
#define STM32_SRAM_BEGIN (&Image$$RW_IRAM1$$ZI$$Limit)
#elif __ICCARM__
#pragma section="HEAP"
#define STM32_SRAM_BEGIN (__segment_end("HEAP"))
#else
extern
int
__bss_end
;
#define STM32_SRAM_BEGIN (&__bss_end)
#endif
/*******************************************************************************
...
...
@@ -50,11 +47,11 @@ extern int __bss_end;
*******************************************************************************/
void
assert_failed
(
u8
*
file
,
u32
line
)
{
rt_kprintf
(
"
\n\r
Wrong parameter value detected on
\r\n
"
);
rt_kprintf
(
" file %s
\r\n
"
,
file
);
rt_kprintf
(
" line %d
\r\n
"
,
line
);
rt_kprintf
(
"
\n\r
Wrong parameter value detected on
\r\n
"
);
rt_kprintf
(
" file %s
\r\n
"
,
file
);
rt_kprintf
(
" line %d
\r\n
"
,
line
);
while
(
1
)
;
while
(
1
)
;
}
/**
...
...
@@ -62,69 +59,56 @@ void assert_failed(u8* file, u32 line)
*/
void
rtthread_startup
(
void
)
{
/* init board */
rt_hw_board_init
();
/* init board */
rt_hw_board_init
();
/* show version */
rt_show_version
();
/* show version */
rt_show_version
();
/* init tick */
rt_system_tick_init
();
/* init tick */
rt_system_tick_init
();
/* init kernel object */
rt_system_object_init
();
/* init kernel object */
rt_system_object_init
();
/* init timer system */
rt_system_timer_init
();
/* init timer system */
rt_system_timer_init
();
#ifdef RT_USING_HEAP
#ifdef __CC_ARM
rt_system_heap_init
((
void
*
)
&
Image
$$
RW_IRAM1
$$
ZI
$$
Limit
,
(
void
*
)
STM32_SRAM_END
);
#elif __ICCARM__
rt_system_heap_init
(
__segment_end
(
"HEAP"
),
(
void
*
)
STM32_SRAM_END
);
#else
/* init memory system */
rt_system_heap_init
((
void
*
)
&
__bss_end
,
(
void
*
)
STM32_SRAM_END
);
#endif
rt_system_heap_init
((
void
*
)
STM32_SRAM_BEGIN
,
(
void
*
)
STM32_SRAM_END
);
#endif
/* init scheduler system */
rt_system_scheduler_init
();
/* init scheduler system */
rt_system_scheduler_init
();
/* init all device */
rt_device_init_all
();
/* init all device */
rt_device_init_all
();
/* init application */
rt_application_init
();
#ifdef RT_USING_FINSH
/* init finsh */
finsh_system_init
();
finsh_set_device
(
"uart1"
);
#endif
/* init application */
rt_application_init
();
/* init timer thread */
rt_system_timer_thread_init
();
/* init idle thread */
rt_thread_idle_init
();
/* init idle thread */
rt_thread_idle_init
();
/* start scheduler */
rt_system_scheduler_start
();
/* start scheduler */
rt_system_scheduler_start
();
/* never reach here */
return
;
/* never reach here */
return
;
}
int
main
(
void
)
{
/* disable interrupt first */
rt_hw_interrupt_disable
();
/* disable interrupt first */
rt_hw_interrupt_disable
();
/* startup RT-Thread RTOS */
rtthread_startup
();
/* startup RT-Thread RTOS */
rtthread_startup
();
return
0
;
return
0
;
}
/*@}*/
bsp/stm32f107/drivers/SConscript
浏览文件 @
203707e5
...
...
@@ -4,6 +4,15 @@ from building import *
cwd
=
os
.
path
.
join
(
str
(
Dir
(
'#'
)),
'drivers'
)
src
=
Glob
(
'*.c'
)
# remove no need file.
if
GetDepend
(
'RT_USING_LWIP'
)
==
False
:
SrcRemove
(
src
,
'stm32_eth.c'
)
if
GetDepend
(
'RT_USING_SPI'
)
==
False
:
SrcRemove
(
src
,
'rt_stm32f10x_spi.c'
)
SrcRemove
(
src
,
'msd.c'
)
CPPPATH
=
[
cwd
]
group
=
DefineGroup
(
'Drivers'
,
src
,
depend
=
[
''
],
CPPPATH
=
CPPPATH
)
...
...
bsp/stm32f107/drivers/board.c
浏览文件 @
203707e5
/*
* File : board.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 200
9
RT-Thread Develop Team
* COPYRIGHT (C) 200
6 - 2013
RT-Thread Develop Team
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
...
...
@@ -14,7 +14,6 @@
#include <rthw.h>
#include <rtthread.h>
#include "board.h"
/**
...
...
@@ -33,39 +32,19 @@
void
NVIC_Configuration
(
void
)
{
#ifdef VECT_TAB_RAM
/* Set the Vector Table base location at 0x20000000 */
NVIC_SetVectorTable
(
NVIC_VectTab_RAM
,
0x0
);
/* Set the Vector Table base location at 0x20000000 */
NVIC_SetVectorTable
(
NVIC_VectTab_RAM
,
0x0
);
#else
/* VECT_TAB_FLASH */
/* Set the Vector Table base location at 0x08000000 */
NVIC_SetVectorTable
(
NVIC_VectTab_FLASH
,
0x0
);
/* Set the Vector Table base location at 0x08000000 */
NVIC_SetVectorTable
(
NVIC_VectTab_FLASH
,
0x0
);
#endif
}
/*******************************************************************************
* Function Name : SysTick_Configuration
* Description : Configures the SysTick for OS tick.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void
SysTick_Configuration
(
void
)
{
RCC_ClocksTypeDef
rcc_clocks
;
rt_uint32_t
cnts
;
RCC_GetClocksFreq
(
&
rcc_clocks
);
cnts
=
(
rt_uint32_t
)
rcc_clocks
.
HCLK_Frequency
/
RT_TICK_PER_SECOND
;
SysTick_Config
(
cnts
);
SysTick_CLKSourceConfig
(
SysTick_CLKSource_HCLK
);
}
/**
* This is the timer interrupt service routine.
*
*/
void
rt_hw_timer_h
andler
(
void
)
void
SysTick_H
andler
(
void
)
{
/* enter interrupt */
rt_interrupt_enter
();
...
...
@@ -79,16 +58,16 @@ void rt_hw_timer_handler(void)
/**
* This function will initial STM32 board.
*/
void
rt_hw_board_init
()
void
rt_hw_board_init
(
void
)
{
/* NVIC Configuration */
NVIC_Configuration
();
/* NVIC Configuration */
NVIC_Configuration
();
/* Configure the SysTick */
SysTick_Configuration
(
);
/* Configure the SysTick */
SysTick_Config
(
SystemCoreClock
/
RT_TICK_PER_SECOND
);
rt_hw_usart_init
();
rt_console_set_device
(
CONSOLE_DEVIC
E
);
rt_hw_usart_init
();
rt_console_set_device
(
RT_CONSOLE_DEVICE_NAM
E
);
}
/*@}*/
bsp/stm32f107/drivers/board.h
浏览文件 @
203707e5
/*
* File : board.h
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 200
9
, RT-Thread Development Team
* COPYRIGHT (C) 200
6 - 2013
, RT-Thread Development Team
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
...
...
@@ -40,27 +40,12 @@
#define STM32_SRAM_SIZE 64
#define STM32_SRAM_END (0x20000000 + STM32_SRAM_SIZE * 1024)
// <o> Console on USART: <0=> no console <1=>USART 1 <2=>USART 2 <3=> USART 3
// <i>Default: 1
#define STM32_CONSOLE_USART 1
#define RT_USING_UART1
#define RT_USING_SPI1
void
rt_hw_board_init
(
void
);
#if STM32_CONSOLE_USART == 0
#define CONSOLE_DEVICE "no"
#elif STM32_CONSOLE_USART == 1
#define CONSOLE_DEVICE "uart1"
#elif STM32_CONSOLE_USART == 2
#define CONSOLE_DEVICE "uart2"
#elif STM32_CONSOLE_USART == 3
#define CONSOLE_DEVICE "uart3"
#endif
void
rt_hw_usart_init
(
void
);
/* SD Card init function */
void
rt_hw_msd_init
(
void
);
#endif
// <<< Use Configuration Wizard in Context Menu >>>
bsp/stm32f107/drivers/msd.c
浏览文件 @
203707e5
此差异已折叠。
点击以展开。
bsp/stm32f107/drivers/msd.h
浏览文件 @
203707e5
/******************** (C) COPYRIGHT 2008 STMicroelectronics ********************
* File Name : msd.h
* Author : MCD Application Team
* Version : V2.1
* Date : 05/30/2008
* Description : Header for msd.c file.
********************************************************************************
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
* FOR MORE INFORMATION PLEASE CAREFULLY READ THE LICENSE AGREEMENT FILE LOCATED
* IN THE ROOT DIRECTORY OF THIS FIRMWARE PACKAGE.
*******************************************************************************/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __MSD_H
#define __MSD_H
/* Includes ------------------------------------------------------------------*/
#include <stm32f10x.h>
/* Private define ------------------------------------------------------------*/
/* Block Size */
#define BLOCK_SIZE 512
/* Dummy byte */
#define DUMMY 0xFF
/*
* File : msd.h
* SPI mode SD Card Driver
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006 - 2012, 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
*
* Change Logs:
* Date Author Notes
* 2009-04-17 Bernard first version.
*/
#ifndef MSD_H_INCLUDED
#define MSD_H_INCLUDED
#include <stdint.h>
#include <drivers/spi.h>
/* SD command (SPI mode) */
#define GO_IDLE_STATE 0
/* CMD0 R1 */
#define SEND_OP_COND 1
/* CMD1 R1 */
#define SWITCH_FUNC 6
/* CMD6 R1 */
#define SEND_IF_COND 8
/* CMD8 R7 */
#define SEND_CSD 9
/* CMD9 R1 */
#define SEND_CID 10
/* CMD10 R1 */
#define STOP_TRANSMISSION 12
/* CMD12 R1B */
#define SEND_STATUS 13
/* CMD13 R2 */
#define SET_BLOCKLEN 16
/* CMD16 R1 */
#define READ_SINGLE_BLOCK 17
/* CMD17 R1 */
#define READ_MULTIPLE_BLOCK 18
/* CMD18 R1 */
#define WRITE_BLOCK 24
/* CMD24 R1 */
#define WRITE_MULTIPLE_BLOCK 25
/* CMD25 R1 */
#define PROGRAM_CSD 27
/* CMD27 R1 */
#define SET_WRITE_PROT 28
/* CMD28 R1B */
#define CLR_WRITE_PROT 29
/* CMD29 R1B */
#define SEND_WRITE_PROT 30
/* CMD30 R1 */
#define ERASE_WR_BLK_START_ADDR 32
/* CMD32 R1 */
#define ERASE_WR_BLK_END_ADDR 33
/* CMD33 R1 */
#define ERASE 38
/* CMD38 R1B */
#define LOCK_UNLOCK 42
/* CMD42 R1 */
#define APP_CMD 55
/* CMD55 R1 */
#define GEN_CMD 56
/* CMD56 R1 */
#define READ_OCR 58
/* CMD58 R3 */
#define CRC_ON_OFF 59
/* CMD59 R1 */
/* Application-Specific Command */
#define SD_STATUS 13
/* ACMD13 R2 */
#define SEND_NUM_WR_BLOCKS 22
/* ACMD22 R1 */
#define SET_WR_BLK_ERASE_COUNT 23
/* ACMD23 R1 */
#define SD_SEND_OP_COND 41
/* ACMD41 R1 */
#define SET_CLR_CARD_DETECT 42
/* ACMD42 R1 */
#define SEND_SCR 51
/* ACMD51 R1 */
/* Start Data tokens */
/* Tokens (necessary because at nop/idle (and CS active) only 0xff is on the data/command line) */
#define MSD_START_DATA_SINGLE_BLOCK_READ 0xFE
/* Data token start byte, Start Single Block Read */
#define MSD_START_DATA_MULTIPLE_BLOCK_READ 0xFE
/* Data token start byte, Start Multiple Block Read */
#define MSD_START_DATA_SINGLE_BLOCK_WRITE 0xFE
/* Data token start byte, Start Single Block Write */
#define MSD_START_DATA_MULTIPLE_BLOCK_WRITE 0xFD
/* Data token start byte, Start Multiple Block Write */
#define MSD_STOP_DATA_MULTIPLE_BLOCK_WRITE 0xFD
/* Data toke stop byte, Stop Multiple Block Write */
#define MSD_TOKEN_READ_START 0xFE
/* Data token start byte, Start Single Block Read */
#define MSD_TOKEN_WRITE_SINGLE_START 0xFE
/* Data token start byte, Start Single Block Write */
/* MSD functions return */
#define MSD_SUCCESS 0x00
#define MSD_FAIL 0xFF
#define MSD_TOKEN_WRITE_MULTIPLE_START 0xFC
/* Data token start byte, Start Multiple Block Write */
#define MSD_TOKEN_WRITE_MULTIPLE_STOP 0xFD
/* Data toke stop byte, Stop Multiple Block Write */
/* MSD reponses and error flags */
#define MSD_RESPONSE_NO_ERROR 0x00
#define MSD_IN_IDLE_STATE 0x01
#define MSD_ERASE_RESET 0x02
#define MSD_ILLEGAL_COMMAND 0x04
#define MSD_COM_CRC_ERROR 0x08
#define MSD_ERASE_SEQUENCE_ERROR 0x10
#define MSD_ADDRESS_ERROR 0x20
#define MSD_PARAMETER_ERROR 0x40
#define MSD_RESPONSE_FAILURE 0xFF
#define MSD_RESPONSE_NO_ERROR
0x00
#define MSD_IN_IDLE_STATE
0x01
#define MSD_ERASE_RESET
0x02
#define MSD_ILLEGAL_COMMAND
0x04
#define MSD_COM_CRC_ERROR
0x08
#define MSD_ERASE_SEQUENCE_ERROR
0x10
#define MSD_ADDRESS_ERROR
0x20
#define MSD_PARAMETER_ERROR
0x40
#define MSD_RESPONSE_FAILURE
0xFF
/* Data response error */
#define MSD_DATA_OK 0x05
#define MSD_DATA_CRC_ERROR 0x0B
#define MSD_DATA_WRITE_ERROR 0x0D
#define MSD_DATA_OTHER_ERROR 0xFF
/* Commands: CMDxx = CMD-number | 0x40 */
#define MSD_GO_IDLE_STATE 0
/* CMD0=0x40 */
#define MSD_SEND_OP_COND 1
/* CMD1=0x41 */
#define MSD_SEND_CSD 9
/* CMD9=0x49 */
#define MSD_SEND_CID 10
/* CMD10=0x4A */
#define MSD_STOP_TRANSMISSION 12
/* CMD12=0x4C */
#define MSD_SEND_STATUS 13
/* CMD13=0x4D */
#define MSD_SET_BLOCKLEN 16
/* CMD16=0x50 */
#define MSD_READ_SINGLE_BLOCK 17
/* CMD17=0x51 */
#define MSD_READ_MULTIPLE_BLOCK 18
/* CMD18=0x52 */
#define MSD_SET_BLOCK_COUNT 23
/* CMD23=0x57 */
#define MSD_WRITE_BLOCK 24
/* CMD24=0x58 */
#define MSD_WRITE_MULTIPLE_BLOCK 25
/* CMD25=0x59 */
#define MSD_PROGRAM_CSD 27
/* CMD27=0x5B */
#define MSD_SET_WRITE_PROT 28
/* CMD28=0x5C */
#define MSD_CLR_WRITE_PROT 29
/* CMD29=0x5D */
#define MSD_SEND_WRITE_PROT 30
/* CMD30=0x5E */
#define MSD_TAG_SECTOR_START 32
/* CMD32=0x60 */
#define MSD_TAG_SECTOR_END 33
/* CMD33=0x61 */
#define MSD_UNTAG_SECTOR 34
/* CMD34=0x62 */
#define MSD_TAG_ERASE_GROUP_START 35
/* CMD35=0x63 */
#define MSD_TAG_ERASE_GROUP_END 36
/* CMD36=0x64 */
#define MSD_UNTAG_ERASE_GROUP 37
/* CMD37=0x65 */
#define MSD_ERASE 38
/* CMD38=0x66 */
#define MSD_READ_OCR 39
/* CMD39=0x67 */
#define MSD_CRC_ON_OFF 40
/* CMD40=0x68 */
/* Exported types ------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
typedef
struct
_MSD_CSD
/*Card Specific Data*/
#define MSD_DATA_OK 0x05
#define MSD_DATA_CRC_ERROR 0x0B
#define MSD_DATA_WRITE_ERROR 0x0D
#define MSD_DATA_OTHER_ERROR 0xFF
#define MSD_DATA_RESPONSE_MASK 0x1F
#define MSD_GET_DATA_RESPONSE(res) (res & MSD_DATA_RESPONSE_MASK)
#define MSD_CMD_LEN 6
/**< command, arg and crc. */
#define MSD_RESPONSE_MAX_LEN 5
/**< response max len */
#define MSD_CSD_LEN 16
/**< SD crad CSD register len */
#define SECTOR_SIZE 512
/**< sector size, default 512byte */
/* card try timeout, unit: ms */
#define CARD_TRY_TIMES 3000
#define CARD_TRY_TIMES_ACMD41 800
#define CARD_WAIT_TOKEN_TIMES 800
#define MSD_USE_PRE_ERASED
/**< id define MSD_USE_PRE_ERASED, before CMD25, send ACMD23 */
/**
* SD/MMC card type
*/
typedef
enum
{
vu8
CSDStruct
;
/* CSD structure */
vu8
SysSpecVersion
;
/* System specification version */
vu8
Reserved1
;
/* Reserved */
vu8
TAAC
;
/* Data read access-time 1 */
vu8
NSAC
;
/* Data read access-time 2 in CLK cycles */
vu8
MaxBusClkFrec
;
/* Max. bus clock frequency */
vu16
CardComdClasses
;
/* Card command classes */
vu8
RdBlockLen
;
/* Max. read data block length */
vu8
PartBlockRead
;
/* Partial blocks for read allowed */
vu8
WrBlockMisalign
;
/* Write block misalignment */
vu8
RdBlockMisalign
;
/* Read block misalignment */
vu8
DSRImpl
;
/* DSR implemented */
vu8
Reserved2
;
/* Reserved */
vu16
DeviceSize
;
/* Device Size */
vu8
MaxRdCurrentVDDMin
;
/* Max. read current @ VDD min */
vu8
MaxRdCurrentVDDMax
;
/* Max. read current @ VDD max */
vu8
MaxWrCurrentVDDMin
;
/* Max. write current @ VDD min */
vu8
MaxWrCurrentVDDMax
;
/* Max. write current @ VDD max */
vu8
DeviceSizeMul
;
/* Device size multiplier */
vu8
EraseGrSize
;
/* Erase group size */
vu8
EraseGrMul
;
/* Erase group size multiplier */
vu8
WrProtectGrSize
;
/* Write protect group size */
vu8
WrProtectGrEnable
;
/* Write protect group enable */
vu8
ManDeflECC
;
/* Manufacturer default ECC */
vu8
WrSpeedFact
;
/* Write speed factor */
vu8
MaxWrBlockLen
;
/* Max. write data block length */
vu8
WriteBlockPaPartial
;
/* Partial blocks for write allowed */
vu8
Reserved3
;
/* Reserded */
vu8
ContentProtectAppli
;
/* Content protection application */
vu8
FileFormatGrouop
;
/* File format group */
vu8
CopyFlag
;
/* Copy flag (OTP) */
vu8
PermWrProtect
;
/* Permanent write protection */
vu8
TempWrProtect
;
/* Temporary write protection */
vu8
FileFormat
;
/* File Format */
vu8
ECC
;
/* ECC code */
vu8
msd_CRC
;
/* CRC */
vu8
Reserved4
;
/* always 1*/
}
sMSD_CSD
;
typedef
struct
_MSD_CID
/*Card Identification Data*/
MSD_CARD_TYPE_UNKNOWN
=
0
,
/**< unknown */
MSD_CARD_TYPE_MMC
,
/**< MultiMedia Card */
MSD_CARD_TYPE_SD_V1_X
,
/**< Ver 1.X Standard Capacity SD Memory Card */
MSD_CARD_TYPE_SD_V2_X
,
/**< Ver 2.00 or later Standard Capacity SD Memory Card */
MSD_CARD_TYPE_SD_SDHC
,
/**< High Capacity SD Memory Card */
MSD_CARD_TYPE_SD_SDXC
,
/**< later Extended Capacity SD Memory Card */
}
msd_card_type
;
typedef
enum
{
vu8
ManufacturerID
;
/* ManufacturerID */
vu16
OEM_AppliID
;
/* OEM/Application ID */
vu32
ProdName1
;
/* Product Name part1 */
vu8
ProdName2
;
/* Product Name part2*/
vu8
ProdRev
;
/* Product Revision */
vu32
ProdSN
;
/* Product Serial Number */
vu8
Reserved1
;
/* Reserved1 */
vu16
ManufactDate
;
/* Manufacturing Date */
vu8
msd_CRC
;
/* CRC */
vu8
Reserved2
;
/* always 1*/
}
sMSD_CID
;
/* Exported constants --------------------------------------------------------*/
/* Exported macro ------------------------------------------------------------*/
/* Exported functions ------------------------------------------------------- */
/*----- High layer function -----*/
u8
MSD_Init
(
void
);
u8
MSD_WriteBlock
(
u8
*
pBuffer
,
u32
WriteAddr
,
u16
NumByteToWrite
);
u8
MSD_ReadBlock
(
u8
*
pBuffer
,
u32
ReadAddr
,
u16
NumByteToRead
);
u8
MSD_WriteBuffer
(
u8
*
pBuffer
,
u32
WriteAddr
,
u32
NumByteToWrite
);
u8
MSD_ReadBuffer
(
u8
*
pBuffer
,
u32
ReadAddr
,
u32
NumByteToRead
);
u8
MSD_GetCSDRegister
(
sMSD_CSD
*
MSD_csd
);
u8
MSD_GetCIDRegister
(
sMSD_CID
*
MSD_cid
);
/*----- Medium layer function -----*/
void
MSD_SendCmd
(
u8
Cmd
,
u32
Arg
,
u8
Crc
);
u8
MSD_GetResponse
(
u8
Response
);
u8
MSD_GetDataResponse
(
void
);
u8
MSD_GoIdleState
(
void
);
u16
MSD_GetStatus
(
void
);
/*----- Low layer function -----*/
u8
MSD_WriteByte
(
u8
byte
);
u8
MSD_ReadByte
(
void
);
#endif
/* __MSD_H */
/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/
response_type_unknown
=
0
,
response_r1
,
response_r1b
,
response_r2
,
response_r3
,
response_r4
,
response_r5
,
response_r7
,
}
response_type
;
struct
msd_device
{
struct
rt_device
parent
;
/**< RT-Thread device struct */
struct
rt_device_blk_geometry
geometry
;
/**< sector size, sector count */
struct
rt_spi_device
*
spi_device
;
/**< SPI interface */
msd_card_type
card_type
;
/**< card type: MMC SD1.x SD2.0 SDHC SDXC */
uint32_t
max_clock
;
/**< MAX SPI clock */
};
extern
rt_err_t
msd_init
(
const
char
*
sd_device_name
,
const
char
*
spi_device_name
);
#endif // MSD_H_INCLUDED
bsp/stm32f107/drivers/platform.c
0 → 100644
浏览文件 @
203707e5
#include <rtthread.h>
#include <board.h>
#ifdef RT_USING_LWIP
#include "stm32_eth.h"
#endif
/* RT_USING_LWIP */
#ifdef RT_USING_SPI
#include "rt_stm32f10x_spi.h"
#if defined(RT_USING_DFS) && defined(RT_USING_DFS_ELMFAT)
#include "msd.h"
#endif
/* RT_USING_DFS */
/*
* SPI1_MOSI: PA7
* SPI1_MISO: PA6
* SPI1_SCK : PA5
*
* CS0: PA4 SD card.
*/
static
void
rt_hw_spi_init
(
void
)
{
#ifdef RT_USING_SPI1
/* register spi bus */
{
static
struct
stm32_spi_bus
stm32_spi
;
GPIO_InitTypeDef
GPIO_InitStructure
;
/* Enable GPIO clock */
RCC_APB2PeriphClockCmd
(
RCC_APB2Periph_GPIOA
|
RCC_APB2Periph_AFIO
,
ENABLE
);
GPIO_InitStructure
.
GPIO_Pin
=
GPIO_Pin_5
|
GPIO_Pin_6
|
GPIO_Pin_7
;
GPIO_InitStructure
.
GPIO_Speed
=
GPIO_Speed_50MHz
;
GPIO_InitStructure
.
GPIO_Mode
=
GPIO_Mode_AF_PP
;
GPIO_Init
(
GPIOA
,
&
GPIO_InitStructure
);
stm32_spi_register
(
SPI1
,
&
stm32_spi
,
"spi1"
);
}
/* attach cs */
{
static
struct
rt_spi_device
spi_device
;
static
struct
stm32_spi_cs
spi_cs
;
GPIO_InitTypeDef
GPIO_InitStructure
;
GPIO_InitStructure
.
GPIO_Speed
=
GPIO_Speed_10MHz
;
GPIO_InitStructure
.
GPIO_Mode
=
GPIO_Mode_Out_PP
;
/* spi21: PG10 */
spi_cs
.
GPIOx
=
GPIOA
;
spi_cs
.
GPIO_Pin
=
GPIO_Pin_4
;
RCC_APB2PeriphClockCmd
(
RCC_APB2Periph_GPIOA
,
ENABLE
);
GPIO_InitStructure
.
GPIO_Pin
=
spi_cs
.
GPIO_Pin
;
GPIO_SetBits
(
spi_cs
.
GPIOx
,
spi_cs
.
GPIO_Pin
);
GPIO_Init
(
spi_cs
.
GPIOx
,
&
GPIO_InitStructure
);
rt_spi_bus_attach_device
(
&
spi_device
,
"spi10"
,
"spi1"
,
(
void
*
)
&
spi_cs
);
}
#endif
/* RT_USING_SPI1 */
}
#endif
/* RT_USING_SPI */
void
rt_platform_init
(
void
)
{
#ifdef RT_USING_SPI
rt_hw_spi_init
();
#if defined(RT_USING_DFS) && defined(RT_USING_DFS_ELMFAT)
/* init sdcard driver */
{
extern
void
rt_hw_msd_init
(
void
);
GPIO_InitTypeDef
GPIO_InitStructure
;
/* PC4 : SD Power */
RCC_APB2PeriphClockCmd
(
RCC_APB2Periph_GPIOC
,
ENABLE
);
GPIO_InitStructure
.
GPIO_Pin
=
GPIO_Pin_4
;
GPIO_InitStructure
.
GPIO_Speed
=
GPIO_Speed_10MHz
;
GPIO_InitStructure
.
GPIO_Mode
=
GPIO_Mode_Out_PP
;
GPIO_Init
(
GPIOC
,
&
GPIO_InitStructure
);
/* SD card power on. */
GPIO_ResetBits
(
GPIOC
,
GPIO_Pin_4
);
rt_thread_delay
(
2
);
msd_init
(
"sd0"
,
"spi10"
);
}
#endif
/* RT_USING_DFS && RT_USING_DFS_ELMFAT */
#endif // RT_USING_SPI
#ifdef RT_USING_LWIP
/* initialize eth interface */
rt_hw_stm32_eth_init
();
#endif
/* RT_USING_LWIP */
}
bsp/stm32f107/drivers/rt_stm32f10x_spi.c
0 → 100644
浏览文件 @
203707e5
#include "rt_stm32f10x_spi.h"
static
rt_err_t
configure
(
struct
rt_spi_device
*
device
,
struct
rt_spi_configuration
*
configuration
);
static
rt_uint32_t
xfer
(
struct
rt_spi_device
*
device
,
struct
rt_spi_message
*
message
);
static
struct
rt_spi_ops
stm32_spi_ops
=
{
configure
,
xfer
};
#ifdef USING_SPI1
static
struct
stm32_spi_bus
stm32_spi_bus_1
;
#endif
/* #ifdef USING_SPI1 */
#ifdef USING_SPI2
static
struct
stm32_spi_bus
stm32_spi_bus_2
;
#endif
/* #ifdef USING_SPI2 */
#ifdef USING_SPI3
static
struct
stm32_spi_bus
stm32_spi_bus_3
;
#endif
/* #ifdef USING_SPI3 */
//------------------ DMA ------------------
#ifdef SPI_USE_DMA
static
uint8_t
dummy
=
0xFF
;
#endif
#ifdef SPI_USE_DMA
static
void
DMA_Configuration
(
struct
stm32_spi_bus
*
stm32_spi_bus
,
const
void
*
send_addr
,
void
*
recv_addr
,
rt_size_t
size
)
{
DMA_InitTypeDef
DMA_InitStructure
;
DMA_ClearFlag
(
stm32_spi_bus
->
DMA_Channel_RX_FLAG_TC
|
stm32_spi_bus
->
DMA_Channel_RX_FLAG_TE
|
stm32_spi_bus
->
DMA_Channel_TX_FLAG_TC
|
stm32_spi_bus
->
DMA_Channel_TX_FLAG_TE
);
/* RX channel configuration */
DMA_Cmd
(
stm32_spi_bus
->
DMA_Channel_RX
,
DISABLE
);
DMA_InitStructure
.
DMA_PeripheralBaseAddr
=
(
u32
)(
&
(
stm32_spi_bus
->
SPI
->
DR
));
DMA_InitStructure
.
DMA_DIR
=
DMA_DIR_PeripheralSRC
;
DMA_InitStructure
.
DMA_PeripheralInc
=
DMA_PeripheralInc_Disable
;
DMA_InitStructure
.
DMA_PeripheralDataSize
=
DMA_PeripheralDataSize_Byte
;
DMA_InitStructure
.
DMA_MemoryDataSize
=
DMA_MemoryDataSize_Byte
;
DMA_InitStructure
.
DMA_Priority
=
DMA_Priority_VeryHigh
;
DMA_InitStructure
.
DMA_Mode
=
DMA_Mode_Normal
;
DMA_InitStructure
.
DMA_M2M
=
DMA_M2M_Disable
;
DMA_InitStructure
.
DMA_BufferSize
=
size
;
if
(
recv_addr
!=
RT_NULL
)
{
DMA_InitStructure
.
DMA_MemoryBaseAddr
=
(
u32
)
recv_addr
;
DMA_InitStructure
.
DMA_MemoryInc
=
DMA_MemoryInc_Enable
;
}
else
{
DMA_InitStructure
.
DMA_MemoryBaseAddr
=
(
u32
)
(
&
dummy
);
DMA_InitStructure
.
DMA_MemoryInc
=
DMA_MemoryInc_Disable
;
}
DMA_Init
(
stm32_spi_bus
->
DMA_Channel_RX
,
&
DMA_InitStructure
);
DMA_Cmd
(
stm32_spi_bus
->
DMA_Channel_RX
,
ENABLE
);
/* TX channel configuration */
DMA_Cmd
(
stm32_spi_bus
->
DMA_Channel_TX
,
DISABLE
);
DMA_InitStructure
.
DMA_PeripheralBaseAddr
=
(
u32
)(
&
(
stm32_spi_bus
->
SPI
->
DR
));
DMA_InitStructure
.
DMA_DIR
=
DMA_DIR_PeripheralDST
;
DMA_InitStructure
.
DMA_PeripheralInc
=
DMA_PeripheralInc_Disable
;
DMA_InitStructure
.
DMA_PeripheralDataSize
=
DMA_PeripheralDataSize_Byte
;
DMA_InitStructure
.
DMA_MemoryDataSize
=
DMA_MemoryDataSize_Byte
;
DMA_InitStructure
.
DMA_Priority
=
DMA_Priority_Medium
;
DMA_InitStructure
.
DMA_Mode
=
DMA_Mode_Normal
;
DMA_InitStructure
.
DMA_M2M
=
DMA_M2M_Disable
;
DMA_InitStructure
.
DMA_BufferSize
=
size
;
if
(
send_addr
!=
RT_NULL
)
{
DMA_InitStructure
.
DMA_MemoryBaseAddr
=
(
u32
)
send_addr
;
DMA_InitStructure
.
DMA_MemoryInc
=
DMA_MemoryInc_Enable
;
}
else
{
DMA_InitStructure
.
DMA_MemoryBaseAddr
=
(
u32
)(
&
dummy
);;
DMA_InitStructure
.
DMA_MemoryInc
=
DMA_MemoryInc_Disable
;
}
DMA_Init
(
stm32_spi_bus
->
DMA_Channel_TX
,
&
DMA_InitStructure
);
DMA_Cmd
(
stm32_spi_bus
->
DMA_Channel_TX
,
ENABLE
);
}
#endif
rt_inline
uint16_t
get_spi_BaudRatePrescaler
(
rt_uint32_t
max_hz
)
{
uint16_t
SPI_BaudRatePrescaler
;
/* STM32F10x SPI MAX 18Mhz */
if
(
max_hz
>=
SystemCoreClock
/
2
&&
SystemCoreClock
/
2
<=
18000000
)
{
SPI_BaudRatePrescaler
=
SPI_BaudRatePrescaler_2
;
}
else
if
(
max_hz
>=
SystemCoreClock
/
4
)
{
SPI_BaudRatePrescaler
=
SPI_BaudRatePrescaler_4
;
}
else
if
(
max_hz
>=
SystemCoreClock
/
8
)
{
SPI_BaudRatePrescaler
=
SPI_BaudRatePrescaler_8
;
}
else
if
(
max_hz
>=
SystemCoreClock
/
16
)
{
SPI_BaudRatePrescaler
=
SPI_BaudRatePrescaler_16
;
}
else
if
(
max_hz
>=
SystemCoreClock
/
32
)
{
SPI_BaudRatePrescaler
=
SPI_BaudRatePrescaler_32
;
}
else
if
(
max_hz
>=
SystemCoreClock
/
64
)
{
SPI_BaudRatePrescaler
=
SPI_BaudRatePrescaler_64
;
}
else
if
(
max_hz
>=
SystemCoreClock
/
128
)
{
SPI_BaudRatePrescaler
=
SPI_BaudRatePrescaler_128
;
}
else
{
/* min prescaler 256 */
SPI_BaudRatePrescaler
=
SPI_BaudRatePrescaler_256
;
}
return
SPI_BaudRatePrescaler
;
}
static
rt_err_t
configure
(
struct
rt_spi_device
*
device
,
struct
rt_spi_configuration
*
configuration
)
{
struct
stm32_spi_bus
*
stm32_spi_bus
=
(
struct
stm32_spi_bus
*
)
device
->
bus
;
SPI_InitTypeDef
SPI_InitStructure
;
SPI_StructInit
(
&
SPI_InitStructure
);
/* data_width */
if
(
configuration
->
data_width
<=
8
)
{
SPI_InitStructure
.
SPI_DataSize
=
SPI_DataSize_8b
;
}
else
if
(
configuration
->
data_width
<=
16
)
{
SPI_InitStructure
.
SPI_DataSize
=
SPI_DataSize_16b
;
}
else
{
return
RT_EIO
;
}
/* baudrate */
SPI_InitStructure
.
SPI_BaudRatePrescaler
=
get_spi_BaudRatePrescaler
(
configuration
->
max_hz
);
/* CPOL */
if
(
configuration
->
mode
&
RT_SPI_CPOL
)
{
SPI_InitStructure
.
SPI_CPOL
=
SPI_CPOL_High
;
}
else
{
SPI_InitStructure
.
SPI_CPOL
=
SPI_CPOL_Low
;
}
/* CPHA */
if
(
configuration
->
mode
&
RT_SPI_CPHA
)
{
SPI_InitStructure
.
SPI_CPHA
=
SPI_CPHA_2Edge
;
}
else
{
SPI_InitStructure
.
SPI_CPHA
=
SPI_CPHA_1Edge
;
}
/* MSB or LSB */
if
(
configuration
->
mode
&
RT_SPI_MSB
)
{
SPI_InitStructure
.
SPI_FirstBit
=
SPI_FirstBit_MSB
;
}
else
{
SPI_InitStructure
.
SPI_FirstBit
=
SPI_FirstBit_LSB
;
}
SPI_InitStructure
.
SPI_Direction
=
SPI_Direction_2Lines_FullDuplex
;
SPI_InitStructure
.
SPI_Mode
=
SPI_Mode_Master
;
SPI_InitStructure
.
SPI_NSS
=
SPI_NSS_Soft
;
/* init SPI */
SPI_I2S_DeInit
(
stm32_spi_bus
->
SPI
);
SPI_Init
(
stm32_spi_bus
->
SPI
,
&
SPI_InitStructure
);
/* Enable SPI_MASTER */
SPI_Cmd
(
stm32_spi_bus
->
SPI
,
ENABLE
);
SPI_CalculateCRC
(
stm32_spi_bus
->
SPI
,
DISABLE
);
return
RT_EOK
;
};
static
rt_uint32_t
xfer
(
struct
rt_spi_device
*
device
,
struct
rt_spi_message
*
message
)
{
struct
stm32_spi_bus
*
stm32_spi_bus
=
(
struct
stm32_spi_bus
*
)
device
->
bus
;
struct
rt_spi_configuration
*
config
=
&
device
->
config
;
SPI_TypeDef
*
SPI
=
stm32_spi_bus
->
SPI
;
struct
stm32_spi_cs
*
stm32_spi_cs
=
device
->
parent
.
user_data
;
rt_uint32_t
size
=
message
->
length
;
/* take CS */
if
(
message
->
cs_take
)
{
GPIO_ResetBits
(
stm32_spi_cs
->
GPIOx
,
stm32_spi_cs
->
GPIO_Pin
);
}
#ifdef SPI_USE_DMA
if
(
message
->
length
>
32
)
{
if
(
config
->
data_width
<=
8
)
{
DMA_Configuration
(
stm32_spi_bus
,
message
->
send_buf
,
message
->
recv_buf
,
message
->
length
);
SPI_I2S_DMACmd
(
SPI
,
SPI_I2S_DMAReq_Tx
|
SPI_I2S_DMAReq_Rx
,
ENABLE
);
while
(
DMA_GetFlagStatus
(
stm32_spi_bus
->
DMA_Channel_RX_FLAG_TC
)
==
RESET
||
DMA_GetFlagStatus
(
stm32_spi_bus
->
DMA_Channel_TX_FLAG_TC
)
==
RESET
);
SPI_I2S_DMACmd
(
SPI
,
SPI_I2S_DMAReq_Tx
|
SPI_I2S_DMAReq_Rx
,
DISABLE
);
}
// rt_memcpy(buffer,_spi_flash_buffer,DMA_BUFFER_SIZE);
// buffer += DMA_BUFFER_SIZE;
}
else
#endif
{
if
(
config
->
data_width
<=
8
)
{
const
rt_uint8_t
*
send_ptr
=
message
->
send_buf
;
rt_uint8_t
*
recv_ptr
=
message
->
recv_buf
;
while
(
size
--
)
{
rt_uint8_t
data
=
0xFF
;
if
(
send_ptr
!=
RT_NULL
)
{
data
=
*
send_ptr
++
;
}
//Wait until the transmit buffer is empty
while
(
SPI_I2S_GetFlagStatus
(
SPI
,
SPI_I2S_FLAG_TXE
)
==
RESET
);
// Send the byte
SPI_I2S_SendData
(
SPI
,
data
);
//Wait until a data is received
while
(
SPI_I2S_GetFlagStatus
(
SPI
,
SPI_I2S_FLAG_RXNE
)
==
RESET
);
// Get the received data
data
=
SPI_I2S_ReceiveData
(
SPI
);
if
(
recv_ptr
!=
RT_NULL
)
{
*
recv_ptr
++
=
data
;
}
}
}
else
if
(
config
->
data_width
<=
16
)
{
const
rt_uint16_t
*
send_ptr
=
message
->
send_buf
;
rt_uint16_t
*
recv_ptr
=
message
->
recv_buf
;
while
(
size
--
)
{
rt_uint16_t
data
=
0xFF
;
if
(
send_ptr
!=
RT_NULL
)
{
data
=
*
send_ptr
++
;
}
//Wait until the transmit buffer is empty
while
(
SPI_I2S_GetFlagStatus
(
SPI
,
SPI_I2S_FLAG_TXE
)
==
RESET
);
// Send the byte
SPI_I2S_SendData
(
SPI
,
data
);
//Wait until a data is received
while
(
SPI_I2S_GetFlagStatus
(
SPI
,
SPI_I2S_FLAG_RXNE
)
==
RESET
);
// Get the received data
data
=
SPI_I2S_ReceiveData
(
SPI
);
if
(
recv_ptr
!=
RT_NULL
)
{
*
recv_ptr
++
=
data
;
}
}
}
}
/* release CS */
if
(
message
->
cs_release
)
{
GPIO_SetBits
(
stm32_spi_cs
->
GPIOx
,
stm32_spi_cs
->
GPIO_Pin
);
}
return
message
->
length
;
};
/** \brief init and register stm32 spi bus.
*
* \param SPI: STM32 SPI, e.g: SPI1,SPI2,SPI3.
* \param stm32_spi: stm32 spi bus struct.
* \param spi_bus_name: spi bus name, e.g: "spi1"
* \return
*
*/
rt_err_t
stm32_spi_register
(
SPI_TypeDef
*
SPI
,
struct
stm32_spi_bus
*
stm32_spi
,
const
char
*
spi_bus_name
)
{
RCC_APB2PeriphClockCmd
(
RCC_APB2Periph_AFIO
,
ENABLE
);
if
(
SPI
==
SPI1
)
{
stm32_spi
->
SPI
=
SPI1
;
#ifdef SPI_USE_DMA
/* Enable the DMA1 Clock */
RCC_AHBPeriphClockCmd
(
RCC_AHBPeriph_DMA1
,
ENABLE
);
stm32_spi
->
DMA_Channel_RX
=
DMA1_Channel2
;
stm32_spi
->
DMA_Channel_TX
=
DMA1_Channel3
;
stm32_spi
->
DMA_Channel_RX_FLAG_TC
=
DMA1_FLAG_TC2
;
stm32_spi
->
DMA_Channel_RX_FLAG_TE
=
DMA1_FLAG_TE2
;
stm32_spi
->
DMA_Channel_TX_FLAG_TC
=
DMA1_FLAG_TC3
;
stm32_spi
->
DMA_Channel_TX_FLAG_TE
=
DMA1_FLAG_TE3
;
#endif
RCC_APB2PeriphClockCmd
(
RCC_APB2Periph_SPI1
,
ENABLE
);
}
else
if
(
SPI
==
SPI2
)
{
stm32_spi
->
SPI
=
SPI2
;
#ifdef SPI_USE_DMA
/* Enable the DMA1 Clock */
RCC_AHBPeriphClockCmd
(
RCC_AHBPeriph_DMA1
,
ENABLE
);
stm32_spi
->
DMA_Channel_RX
=
DMA1_Channel4
;
stm32_spi
->
DMA_Channel_TX
=
DMA1_Channel5
;
stm32_spi
->
DMA_Channel_RX_FLAG_TC
=
DMA1_FLAG_TC4
;
stm32_spi
->
DMA_Channel_RX_FLAG_TE
=
DMA1_FLAG_TE4
;
stm32_spi
->
DMA_Channel_TX_FLAG_TC
=
DMA1_FLAG_TC5
;
stm32_spi
->
DMA_Channel_TX_FLAG_TE
=
DMA1_FLAG_TE5
;
#endif
RCC_APB1PeriphClockCmd
(
RCC_APB1Periph_SPI2
,
ENABLE
);
}
else
if
(
SPI
==
SPI3
)
{
stm32_spi
->
SPI
=
SPI3
;
#ifdef SPI_USE_DMA
/* Enable the DMA2 Clock */
RCC_AHBPeriphClockCmd
(
RCC_AHBPeriph_DMA2
,
ENABLE
);
stm32_spi
->
DMA_Channel_RX
=
DMA2_Channel1
;
stm32_spi
->
DMA_Channel_TX
=
DMA2_Channel2
;
stm32_spi
->
DMA_Channel_RX_FLAG_TC
=
DMA2_FLAG_TC1
;
stm32_spi
->
DMA_Channel_RX_FLAG_TE
=
DMA2_FLAG_TE1
;
stm32_spi
->
DMA_Channel_TX_FLAG_TC
=
DMA2_FLAG_TC2
;
stm32_spi
->
DMA_Channel_TX_FLAG_TE
=
DMA2_FLAG_TE2
;
#endif
RCC_APB1PeriphClockCmd
(
RCC_APB1Periph_SPI3
,
ENABLE
);
}
else
{
return
RT_ENOSYS
;
}
return
rt_spi_bus_register
(
&
stm32_spi
->
parent
,
spi_bus_name
,
&
stm32_spi_ops
);
}
bsp/stm32f107/drivers/rt_stm32f10x_spi.h
0 → 100644
浏览文件 @
203707e5
#ifndef STM32_SPI_H_INCLUDED
#define STM32_SPI_H_INCLUDED
#include <rtdevice.h>
#include "stm32f10x.h"
#include "stm32f10x_spi.h"
#include "board.h"
//#define SPI_USE_DMA
struct
stm32_spi_bus
{
struct
rt_spi_bus
parent
;
SPI_TypeDef
*
SPI
;
#ifdef SPI_USE_DMA
DMA_Channel_TypeDef
*
DMA_Channel_TX
;
DMA_Channel_TypeDef
*
DMA_Channel_RX
;
uint32_t
DMA_Channel_TX_FLAG_TC
;
uint32_t
DMA_Channel_TX_FLAG_TE
;
uint32_t
DMA_Channel_RX_FLAG_TC
;
uint32_t
DMA_Channel_RX_FLAG_TE
;
#endif
/* SPI_USE_DMA */
};
struct
stm32_spi_cs
{
GPIO_TypeDef
*
GPIOx
;
uint16_t
GPIO_Pin
;
};
/* public function list */
rt_err_t
stm32_spi_register
(
SPI_TypeDef
*
SPI
,
struct
stm32_spi_bus
*
stm32_spi
,
const
char
*
spi_bus_name
);
#endif // STM32_SPI_H_INCLUDED
bsp/stm32f107/drivers/stm32f10x_it.c
浏览文件 @
203707e5
...
...
@@ -5,7 +5,7 @@
* @version V3.5.0
* @date 08-April-2011
* @brief Main Interrupt Service Routines.
* This file provides template for all exceptions handler and
* This file provides template for all exceptions handler and
* peripherals interrupt service routine.
******************************************************************************
* @attention
...
...
@@ -19,7 +19,7 @@
*
* <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
******************************************************************************
*/
*/
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x_it.h"
...
...
@@ -107,12 +107,6 @@ void DebugMon_Handler(void)
{
}
void
SysTick_Handler
(
void
)
{
extern
void
rt_hw_timer_handler
(
void
);
rt_hw_timer_handler
();
}
/******************************************************************************/
/* STM32F10x Peripherals Interrupt Handlers */
/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */
...
...
@@ -132,7 +126,7 @@ void USART1_IRQHandler(void)
#ifdef RT_USING_UART1
extern
struct
rt_device
uart1_device
;
extern
void
rt_hw_serial_isr
(
struct
rt_device
*
device
);
/* enter interrupt */
rt_interrupt_enter
();
...
...
@@ -191,7 +185,7 @@ void USART3_IRQHandler(void)
/**
* @}
*/
*/
/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/
bsp/stm32f107/drivers/usart.c
浏览文件 @
203707e5
...
...
@@ -13,6 +13,7 @@
* 2010-03-29 Bernard remove interrupt Tx and DMA Rx mode
*/
#include <board.h>
#include "usart.h"
#include <serial.h>
#include <stm32f10x_dma.h>
...
...
bsp/stm32f107/project.uvproj
浏览文件 @
203707e5
此差异已折叠。
点击以展开。
bsp/stm32f107/readme.txt
浏览文件 @
203707e5
...
...
@@ -2,4 +2,4 @@
# GoldBull debug board
- 10M/100M ethernet
- SPI SD Card
- LCD
SPI: SPI1 (PA5,PA6,PA7). CS:PA4
bsp/stm32f107/rtconfig.h
浏览文件 @
203707e5
...
...
@@ -28,7 +28,6 @@
/* #define RT_USING_TIMER_SOFT */
#define RT_TIMER_THREAD_PRIO 4
#define RT_TIMER_THREAD_STACK_SIZE 512
#define RT_TIMER_TICK_PER_SECOND 10
/* SECTION: IPC */
/* Using Semaphore*/
...
...
@@ -59,13 +58,21 @@
/* SECTION: Device System */
/* Using Device System */
#define RT_USING_DEVICE
#define RT_USING_
UART1
#define RT_USING_
SPI
/* SECTION: Console options */
#define RT_USING_CONSOLE
/* the buffer size of console*/
#define RT_CONSOLEBUF_SIZE 128
// <string name="RT_CONSOLE_DEVICE_NAME" description="console device name" default="uart3" />
#define RT_CONSOLE_DEVICE_NAME "uart1"
// </section>
// <section name="RT_USING_COMPONENTS_INIT" description="Using components init" default="true" >
#define RT_USING_COMPONENTS_INIT
// </section>
/* SECTION: finsh, a C-Express shell */
#define RT_USING_FINSH
/* Using symbol table */
...
...
bsp/stm32f107/template.uvproj
浏览文件 @
203707e5
...
...
@@ -43,14 +43,14 @@
<NotGenerated>
0
</NotGenerated>
<InvalidFlash>
1
</InvalidFlash>
</TargetStatus>
<OutputDirectory>
.\
obj
\
</OutputDirectory>
<OutputDirectory>
.\
build
\
</OutputDirectory>
<OutputName>
rtthread-stm32
</OutputName>
<CreateExecutable>
1
</CreateExecutable>
<CreateLib>
0
</CreateLib>
<CreateHexFile>
0
</CreateHexFile>
<DebugInformation>
1
</DebugInformation>
<BrowseInformation>
0
</BrowseInformation>
<ListingPath>
.\
</ListingPath>
<ListingPath>
.\
build\
</ListingPath>
<HexFormatSelection>
1
</HexFormatSelection>
<Merge32K>
0
</Merge32K>
<CreateBatchFile>
0
</CreateBatchFile>
...
...
@@ -71,9 +71,9 @@
<UserProg2Dos16Mode>
0
</UserProg2Dos16Mode>
</BeforeMake>
<AfterMake>
<RunUserProg1>
0
</RunUserProg1>
<RunUserProg1>
1
</RunUserProg1>
<RunUserProg2>
0
</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg1Name>
fromelf --bin !L --output rtthread.bin
</UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>
0
</UserProg1Dos16Mode>
<UserProg2Dos16Mode>
0
</UserProg2Dos16Mode>
...
...
bsp/stm32f10x/project.Uv2
浏览文件 @
203707e5
...
...
@@ -24,7 +24,6 @@ File 2,1,<..\..\src\ipc.c><ipc.c>
File 2,1,<..\..\src\irq.c><irq.c>
File 2,1,<..\..\src\kservice.c><kservice.c>
File 2,1,<..\..\src\mem.c><mem.c>
File 2,1,<..\..\src\memheap.c><memheap.c>
File 2,1,<..\..\src\mempool.c><mempool.c>
File 2,1,<..\..\src\object.c><object.c>
File 2,1,<..\..\src\scheduler.c><scheduler.c>
...
...
@@ -48,7 +47,6 @@ File 4,1,<..\..\components\finsh\finsh_var.c><finsh_var.c>
File 4,1,<..\..\components\finsh\finsh_vm.c><finsh_vm.c>
File 4,1,<..\..\components\finsh\shell.c><shell.c>
File 4,1,<..\..\components\finsh\symbol.c><symbol.c>
File 5,1,<Libraries\CMSIS\CM3\CoreSupport\core_cm3.c><core_cm3.c>
File 5,1,<Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.c><system_stm32f10x.c>
File 5,1,<Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_crc.c><stm32f10x_crc.c>
File 5,1,<Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_rcc.c><stm32f10x_rcc.c>
...
...
@@ -76,8 +74,6 @@ File 5,1,<Libraries\STM32F10x_StdPeriph_Driver\src\misc.c><misc.c>
File 5,2,<Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm\startup_stm32f10x_hd.s><startup_stm32f10x_hd.s>
Options 1,0,0 // Target 'RT-Thread STM32'
Device (STM32F103ZE)
Vendor (STMicroelectronics)
...
...
@@ -103,18 +99,18 @@ Options 1,0,0 // Target 'RT-Thread STM32'
EnvReg (ST\STM32F10x\)
OrgReg (ST\STM32F10x\)
TgStat=16
OutDir (.\
obj
\)
OutDir (.\
build
\)
OutName (rtthread-stm32)
GenApp=1
GenLib=0
GenHex=0
Debug=1
Browse=0
LstDir (.\)
LstDir (.\
build\
)
HexSel=1
MG32K=0
TGMORE=0
RunUsr 0
0 <
>
RunUsr 0
1 <fromelf --bin !L --output rtthread.bin
>
RunUsr 1 0 <>
BrunUsr 0 0 <>
BrunUsr 1 0 <>
...
...
@@ -136,7 +132,7 @@ Options 1,0,0 // Target 'RT-Thread STM32'
ADSCMISC ()
ADSCDEFN (STM32F10X_HD, USE_STDPERIPH_DRIVER)
ADSCUDEF ()
ADSCINCD (Libraries\STM32F10x_StdPeriph_Driver\inc;.
;..\..\include;Libraries\CMSIS\CM3\CoreSupport
;..\..\libcpu\arm\cortex-m3;..\..\libcpu\arm\common;..\..\components\finsh;Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x)
ADSCINCD (Libraries\STM32F10x_StdPeriph_Driver\inc;.
.\..\components\CMSIS\Include;.;..\..\include
;..\..\libcpu\arm\cortex-m3;..\..\libcpu\arm\common;..\..\components\finsh;Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x)
ADSASFLG { 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
ADSAMISC ()
ADSADEFN ()
...
...
bsp/stm32f10x/template.Uv2
浏览文件 @
203707e5
...
...
@@ -31,18 +31,18 @@ Options 1,0,0 // Target 'RT-Thread STM32'
EnvReg (ST\STM32F10x\)
OrgReg (ST\STM32F10x\)
TgStat=16
OutDir (.\
obj
\)
OutDir (.\
build
\)
OutName (rtthread-stm32)
GenApp=1
GenLib=0
GenHex=0
Debug=1
Browse=0
LstDir (.\)
LstDir (.\
build\
)
HexSel=1
MG32K=0
TGMORE=0
RunUsr 0
0 <
>
RunUsr 0
1 <fromelf --bin !L --output rtthread.bin
>
RunUsr 1 0 <>
BrunUsr 0 0 <>
BrunUsr 1 0 <>
...
...
bsp/stm32f10x/template.uvproj
浏览文件 @
203707e5
...
...
@@ -43,14 +43,14 @@
<NotGenerated>
0
</NotGenerated>
<InvalidFlash>
1
</InvalidFlash>
</TargetStatus>
<OutputDirectory>
.\
obj
\
</OutputDirectory>
<OutputDirectory>
.\
build
\
</OutputDirectory>
<OutputName>
rtthread-stm32
</OutputName>
<CreateExecutable>
1
</CreateExecutable>
<CreateLib>
0
</CreateLib>
<CreateHexFile>
0
</CreateHexFile>
<DebugInformation>
1
</DebugInformation>
<BrowseInformation>
1
</BrowseInformation>
<ListingPath>
.\
obj
\
</ListingPath>
<ListingPath>
.\
build
\
</ListingPath>
<HexFormatSelection>
1
</HexFormatSelection>
<Merge32K>
0
</Merge32K>
<CreateBatchFile>
0
</CreateBatchFile>
...
...
@@ -71,9 +71,9 @@
<UserProg2Dos16Mode>
0
</UserProg2Dos16Mode>
</BeforeMake>
<AfterMake>
<RunUserProg1>
0
</RunUserProg1>
<RunUserProg1>
1
</RunUserProg1>
<RunUserProg2>
0
</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg1Name>
fromelf --bin !L --output rtthread.bin
</UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>
0
</UserProg1Dos16Mode>
<UserProg2Dos16Mode>
0
</UserProg2Dos16Mode>
...
...
bsp/stm32f20x/applications/startup.c
浏览文件 @
203707e5
...
...
@@ -137,9 +137,6 @@ int main(void)
/* disable interrupt first */
rt_hw_interrupt_disable
();
/* init system setting */
SystemInit
();
/* startup RT-Thread RTOS */
rtthread_startup
();
...
...
bsp/stm32f20x/project.uvproj
浏览文件 @
203707e5
...
...
@@ -40,14 +40,14 @@
<NotGenerated>
0
</NotGenerated>
<InvalidFlash>
1
</InvalidFlash>
</TargetStatus>
<OutputDirectory>
.\
obj
\
</OutputDirectory>
<OutputDirectory>
.\
build
\
</OutputDirectory>
<OutputName>
rtthread-stm32
</OutputName>
<CreateExecutable>
1
</CreateExecutable>
<CreateLib>
0
</CreateLib>
<CreateHexFile>
0
</CreateHexFile>
<DebugInformation>
1
</DebugInformation>
<BrowseInformation>
0
</BrowseInformation>
<ListingPath>
.\
obj
\
</ListingPath>
<ListingPath>
.\
build
\
</ListingPath>
<HexFormatSelection>
1
</HexFormatSelection>
<Merge32K>
0
</Merge32K>
<CreateBatchFile>
0
</CreateBatchFile>
...
...
@@ -68,9 +68,9 @@
<UserProg2Dos16Mode>
0
</UserProg2Dos16Mode>
</BeforeMake>
<AfterMake>
<RunUserProg1>
0
</RunUserProg1>
<RunUserProg1>
1
</RunUserProg1>
<RunUserProg2>
0
</RunUserProg2>
<UserProg1Name
/
>
<UserProg1Name
>
fromelf --bin !L --output rtthread.bin
</UserProg1Name
>
<UserProg2Name
/>
<UserProg1Dos16Mode>
0
</UserProg1Dos16Mode>
<UserProg2Dos16Mode>
0
</UserProg2Dos16Mode>
...
...
@@ -343,7 +343,7 @@
<MiscControls
/>
<Define>
USE_STDPERIPH_DRIVER
</Define>
<Undefine
/>
<IncludePath>
.;..\..\components\
finsh;..\..\include;..\..\libcpu\arm\common;..\..\libcpu\arm\cortex-m3;Libraries\CMSIS\CM3\CoreSupport;Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F2xx;Libraries\STM32F2xx_StdPeriph_Driver\inc;applications;driver
s
</IncludePath>
<IncludePath>
.;..\..\components\
CMSIS\Include;..\..\components\finsh;..\..\include;..\..\libcpu\arm\common;..\..\libcpu\arm\cortex-m3;Drivers;Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F2xx;Libraries\STM32F2xx_StdPeriph_Driver\inc;application
s
</IncludePath>
</VariousControls>
</Cads>
<Aads>
...
...
@@ -458,13 +458,6 @@
</Group>
<Group>
<GroupName>
STM32_StdPeriph
</GroupName>
<Files>
<File>
<FileName>
core_cm3.c
</FileName>
<FileType>
1
</FileType>
<FilePath>
Libraries\CMSIS\CM3\CoreSupport\core_cm3.c
</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>
system_stm32f2xx.c
</FileName>
...
...
@@ -748,13 +741,6 @@
<FilePath>
..\..\src\mem.c
</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>
memheap.c
</FileName>
<FileType>
1
</FileType>
<FilePath>
..\..\src\memheap.c
</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>
mempool.c
</FileName>
...
...
bsp/stm32f20x/template.uvproj
浏览文件 @
203707e5
...
...
@@ -43,14 +43,14 @@
<NotGenerated>
0
</NotGenerated>
<InvalidFlash>
1
</InvalidFlash>
</TargetStatus>
<OutputDirectory>
.\
obj
\
</OutputDirectory>
<OutputDirectory>
.\
build
\
</OutputDirectory>
<OutputName>
rtthread-stm32
</OutputName>
<CreateExecutable>
1
</CreateExecutable>
<CreateLib>
0
</CreateLib>
<CreateHexFile>
0
</CreateHexFile>
<DebugInformation>
1
</DebugInformation>
<BrowseInformation>
0
</BrowseInformation>
<ListingPath>
.\
obj
\
</ListingPath>
<ListingPath>
.\
build
\
</ListingPath>
<HexFormatSelection>
1
</HexFormatSelection>
<Merge32K>
0
</Merge32K>
<CreateBatchFile>
0
</CreateBatchFile>
...
...
@@ -71,9 +71,9 @@
<UserProg2Dos16Mode>
0
</UserProg2Dos16Mode>
</BeforeMake>
<AfterMake>
<RunUserProg1>
0
</RunUserProg1>
<RunUserProg1>
1
</RunUserProg1>
<RunUserProg2>
0
</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg1Name>
fromelf --bin !L --output rtthread.bin
</UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>
0
</UserProg1Dos16Mode>
<UserProg2Dos16Mode>
0
</UserProg2Dos16Mode>
...
...
bsp/stm32f40x/project.uvproj
浏览文件 @
203707e5
...
...
@@ -68,9 +68,9 @@
<UserProg2Dos16Mode>
0
</UserProg2Dos16Mode>
</BeforeMake>
<AfterMake>
<RunUserProg1>
0
</RunUserProg1>
<RunUserProg1>
1
</RunUserProg1>
<RunUserProg2>
0
</RunUserProg2>
<UserProg1Name
/
>
<UserProg1Name
>
fromelf --bin !L --output rtthread.bin
</UserProg1Name
>
<UserProg2Name
/>
<UserProg1Dos16Mode>
0
</UserProg1Dos16Mode>
<UserProg2Dos16Mode>
0
</UserProg2Dos16Mode>
...
...
@@ -713,13 +713,6 @@
<FilePath>
..\..\src\mem.c
</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>
memheap.c
</FileName>
<FileType>
1
</FileType>
<FilePath>
..\..\src\memheap.c
</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>
mempool.c
</FileName>
...
...
bsp/stm32f40x/template.uvproj
浏览文件 @
203707e5
...
...
@@ -71,9 +71,9 @@
<UserProg2Dos16Mode>
0
</UserProg2Dos16Mode>
</BeforeMake>
<AfterMake>
<RunUserProg1>
0
</RunUserProg1>
<RunUserProg1>
1
</RunUserProg1>
<RunUserProg2>
0
</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg1Name>
fromelf --bin !L --output rtthread.bin
</UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>
0
</UserProg1Dos16Mode>
<UserProg2Dos16Mode>
0
</UserProg2Dos16Mode>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录