Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
tools-mirror
Micropython
提交
dfad7f47
M
Micropython
项目概览
tools-mirror
/
Micropython
12 个月 前同步成功
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
Micropython
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
dfad7f47
编写于
3月 23, 2015
作者:
D
Damien George
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
stmhal: Optimise ADC.read_timed() so that it can sample up to 750kHz.
上级
44cd46a7
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
31 addition
and
4 deletion
+31
-4
stmhal/adc.c
stmhal/adc.c
+31
-4
未找到文件。
stmhal/adc.c
浏览文件 @
dfad7f47
...
...
@@ -225,22 +225,49 @@ STATIC mp_obj_t adc_read_timed(mp_obj_t self_in, mp_obj_t buf_in, mp_obj_t freq_
// Start timer
HAL_TIM_Base_Start
(
&
TIM6_Handle
);
// This uses the timer in polling mode to do the sampling
// We could use DMA, but then we can't convert the values correctly for the buffer
// configure the ADC channel
adc_config_channel
(
self
);
// This uses the timer in polling mode to do the sampling
// TODO use DMA
uint
nelems
=
bufinfo
.
len
/
typesize
;
for
(
uint
index
=
0
;
index
<
nelems
;
index
++
)
{
// Wait for the timer to trigger
// Wait for the timer to trigger
so we sample at the correct frequency
while
(
__HAL_TIM_GET_FLAG
(
&
TIM6_Handle
,
TIM_FLAG_UPDATE
)
==
RESET
)
{
}
__HAL_TIM_CLEAR_FLAG
(
&
TIM6_Handle
,
TIM_FLAG_UPDATE
);
uint
value
=
adc_read_channel
(
&
self
->
handle
);
if
(
index
==
0
)
{
// for the first sample we need to turn the ADC on
HAL_ADC_Start
(
&
self
->
handle
);
}
else
{
// for subsequent samples we can just set the "start sample" bit
ADCx
->
CR2
|=
(
uint32_t
)
ADC_CR2_SWSTART
;
}
// wait for sample to complete
uint32_t
tickstart
=
HAL_GetTick
();
while
((
ADCx
->
SR
&
ADC_FLAG_EOC
)
!=
ADC_FLAG_EOC
)
{
#define READ_TIMED_TIMEOUT (10) // in ms
if
(((
HAL_GetTick
()
-
tickstart
)
>
READ_TIMED_TIMEOUT
))
{
break
;
// timeout
}
}
// read value
uint
value
=
ADCx
->
DR
;
// store value in buffer
if
(
typesize
==
1
)
{
value
>>=
4
;
}
mp_binary_set_val_array_from_int
(
bufinfo
.
typecode
,
bufinfo
.
buf
,
index
,
value
);
}
// turn the ADC off
HAL_ADC_Stop
(
&
self
->
handle
);
// Stop timer
HAL_TIM_Base_Stop
(
&
TIM6_Handle
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录