X
首页
技术
模拟电子
单片机
半导体
电源管理
嵌入式
传感器
最能打国产芯
应用
汽车电子
工业控制
家用电子
手机便携
安防电子
医疗电子
网络通信
测试测量
物联网
最能打国产芯
大学堂
首页
直播
专题
TI 培训
论坛
汽车电子
国产芯片
电机驱动控制
电源技术
单片机
模拟电子
PCB设计
电子竞赛
DIY/开源
嵌入式系统
医疗电子
颁奖专区
【厂商专区】
【电子技术】
【创意与实践】
【行业应用】
【休息一下】
最能打国产芯
活动中心
直播
发现活动
颁奖区
电子头条
参考设计
下载中心
分类资源
文集
排行榜
电路图
Datasheet
最能打国产芯
Microchip MCU
[原创] 【Atmel SAM R21】时钟、SPI和触摸
ljj3166
2015-1-12 18:12
楼主
下午休息
果断开搞
基本上把触摸吃下了
过程中遇到不少问题,一起瞧瞧。
1、时钟
在上篇帖子:
https://bbs.eeworld.com.cn/thread-454206-1-1.html
里面,虽然驱动起来了LCD显示
但是刷新速率很慢,第一反应时SPI的时钟速度
R21的SPI设置,默认情况下是100KHz,修改到500KHz,刷新速度上来了一些
但是依然不尽人意
来看看时钟吧
阅读数据手册发现在默认情况下,R21的时钟居然是令人发指的1MHz
没办法,谁叫它冲着低功耗物联网应用呢
写了几句代码,测试一下
SysTick_Config(1000);
SysTick_Handler()
{
port_pin_toggle_output_level(PIN_PA14);
}
无敌的systick,和systick服务
大致意思是每千分之一的时钟,把PA14翻转一次
看看默认情况下,PA14口的波形
真的是1kHz的样子
开始捯饬时钟吧
做个简单的配置
void clock_init(){
struct system_clock_source_osc8m_config osc8m_conf;
system_clock_source_osc8m_get_config_defaults(&osc8m_conf);
osc8m_conf.prescaler = SYSTEM_OSC8M_DIV_1;
osc8m_conf.on_demand = true;
osc8m_conf.run_in_standby = false;
system_clock_source_osc8m_set_config(&osc8m_conf);
system_clock_source_enable(GCLK_SOURCE_OSC8M);
system_cpu_clock_set_divider(SYSTEM_MAIN_CLOCK_DIV_1);
system_apb_clock_set_divider(SYSTEM_CLOCK_APB_APBA, SYSTEM_MAIN_CLOCK_DIV_1);
system_apb_clock_set_divider(SYSTEM_CLOCK_APB_APBB, SYSTEM_MAIN_CLOCK_DIV_1);
system_apb_clock_set_divider(SYSTEM_CLOCK_APB_APBC, SYSTEM_MAIN_CLOCK_DIV_1);
}
开启卑职的8M时钟,再泡泡systick看看
嗯,差不多8kHz的样子
手上就这个渣渣USBee,
普源神马的,快到碗里来!!!!
时钟配置之后,刷屏速度那是杠杠的
也尝试过外置晶振、DPLL、DFLL,一次没成功,不折腾了
8M实测目前也够用了,以后再说
2、SPI配置
这块屏很有意思,驱动IC和触摸IC使用同一条SPI总线
CLK和MOSI共用,由于液晶驱动IC无需发送数据给R21,所以MISO就由触摸IC使用
所有的SPI处理过程都由CPLD处理,和驱动IC、触摸IC没有半毛钱关系。所以它们的数据手册还是别看了
R21刚开始死活接收不到触摸IC返回的数据,从串口打印发现MISO接收到的都是0
挂上USBee,发现实际上MISO是有数据过来的
把R21的MISO直接到Vcc,发现接收到的数据依然为0
毫无疑问,R21的SPI配置有问题
捯饬了半天,才整好,其实也是受了ASF的蛊惑
看正确的配置
uint16_t SPI_Communication(uint16_t send_char)
{
uint16_t RX_data;
while (!spi_is_ready_to_write(&spi_master_instance)) {}
spi_write(&spi_master_instance, send_char);
while(!spi_is_write_complete(&spi_master_instance)){}
while(!spi_is_ready_to_read(&spi_master_instance)){}
spi_read(&spi_master_instance,&RX_data);
return RX_data;
}
其实和很多SPI通信一样,通过查询方式通信
但是,看了ASF中对spi_write和spi_read的描述,却让楼主大呼坑爹
看看spi_write的代码
static inline enum status_code spi_write(
struct spi_module *module,
uint16_t tx_data)
{
/* Sanity check arguments */
Assert(module);
Assert(module->hw);
SercomSpi *const spi_module = &(module->hw->SPI);
/* Check if the data register has been copied to the shift register */
if (!spi_is_ready_to_write(module)) {
/* Data register has not been copied to the shift register, return */
return STATUS_BUSY;
}
/* Write the character to the DATA register */
spi_module->DATA.reg = tx_data & SERCOM_SPI_DATA_MASK;
return STATUS_OK;
}
其实已经调用了查询函数spi_is_ready_to_write,没看清楚用的是if,结果折腾了老半天,请原谅楼主的不仔细
再翻出ASF宝典
里焦外嫩啊
果断在相关位置撸上这几句
while (!spi_is_ready_to_write(&spi_master_instance)) {}
while(!spi_is_write_complete(&spi_master_instance)){}
while(!spi_is_ready_to_read(&spi_master_instance)){}
手起刀落,一切结束了
还有SPI的频率,似乎和main clock有关,只能到一半这个样子
8M下,spi最大可以到4M
数据手册上也没看到具体的说明,这里有些很奇怪的问题
4M可以跑,1M可以跑,2M、3M居然不行;400k可以跑,40k可以跑,500k、800k居然跑不了
ATMEL的时钟,真不是一般的复杂啊
3、触摸屏
SPI时钟对这个触摸的影响确实很大
上M的时钟,校准会出错
太低的时钟,显示速度慢到坑爹
书写时还有断线的现象
MXCHIP官方给出的驱动,算法上还得要仔细推敲一下才行
后面再慢慢折腾吧
最后上个测试视频吧,可以从串口采集点击触摸屏的坐标
youku又把楼主的视频映射到1/2逆世界去了
触摸屏的数据基本上已经能够采集到了,接下来通过无线广播出去
本帖最后由 ljj3166 于 2015-1-12 18:45 编辑
So TM what......?
点赞
回复评论 (3)
沙发
ljj3166
干掉沙发,干掉〇回复
So TM what......?
点赞
2015-1-12 18:47
板凳
shen_wei
挺不错的。。。学习了!!
点赞
2015-12-11 10:07
4楼
yf19910823
赞一个
点赞
2016-1-3 13:11
最新活动
报名直播赢【双肩包、京东卡、水杯】| 高可靠性IGBT的新选择——安世半导体650V IGBT
30套RV1106 Linux开发板(带摄像头),邀您动手挑战边缘AI~
安世半导体理想二极管与负载开关,保障物联网应用的稳健高效运行
免费申请 | 上百份MPS MIE模块,免费试用还有礼!
PI 电源小课堂|无 DC-DC 变换实现多路高精度输出反激电源
2024 瑞萨电子MCU/MPU工业技术研讨会——深圳、上海站, 火热报名中
随便看看
新手学习树莓派3笔记(6)--利用simpleCV对图像进行简单处理操作
魔术还是科技?一个非常有创意的视频
求助!!!关于软硬件的开发
EVC 触笔为何不能响应滑动事件
2013年第一个DIY,准备做一个“便携式空气质量监测器”
第10章 信号
TI的数字电源方案分享
一个射频工程师应该知道的
请高手帮忙,我要个MP3电路原理图:ARM处理器(带编解码的),还有不要硬盘存储的,具体需要存储器,电源模块,音频放大,驱动USB口。
2020年ST MEMS传感器创意大赛颁奖礼,致敬敢于挑战&坚持的你们~
影响WinCE6.0启动时间的因素
电子变压器的功能划分
38kHz 红外发射与接收
南华大学黄智伟系列-- 注意去耦电路中电容器的使用
急求一份 51单片机PWM控制直流电机调速的资料 ! 小弟在此谢过了 !!!!!
基于LM3S1968的迷宫式路径记录及实时分析检测系统
LCD段码屏光刻不良---浮胶
恒流恒压电路
分享一下Keil的背景色和字体配置文件和VS Code
stm32f769 寄存器配置SD卡驱动
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
京公网安备 11010802033920号
回复
写回复
收藏
回复