piaoran1314 发表于 2018-5-10 15:36:54

SYD8801片内外设配置【IO口反相器设置】【FLASH空间分配】 ...

SYD8801是一款低功耗高性能蓝牙低功耗SOC,集成了高性能2.4GHz射频收发机、32位ARM Cortex-M0处理器、128kB Flash存储器、以及丰富的数字接口。SYD8801片上集成了Balun无需阻抗匹配网络、高效率DCDC降压转换器,适合用于可穿戴、物联网设备等。具体可咨询:syd-tek.com/

IO口反相器设置
SYD8801的PIN_CONFIG->GPIO_POL寄存器就是io口反相器控制寄存器,当设置某位的时候相应的IO口的反相器就会启动,也就是说如果启动反相器,IO的状态为低电平,芯片读取的寄存器将会读到1,寄存器说明如下:
http://img.blog.csdn.net/20170721144840224
                                                                                                                                                                                                                                                                  更新于:2017年7月21日

这里做一个车测试,主函数如下:
http://img.blog.csdn.net/20170721145627646

这里对BIT12和BIT13这两个按键不设置反相器,对BIT14和BIT15设置了反相器,同时这里还有中断功能,中断函数如下:
http://img.blog.csdn.net/20170209212252153
当没有中断发生的时候都会按键所在的IO口寄存器直接取反赋值给了LED,也就是如果不使用反相器的情况下按键没有按下则LED亮,反之熄灭,对于使用了反相器的情况正好相反,当按下按键发生中断的时候,相应的LED会闪烁10次。这里电路原理图如下:
http://img.blog.csdn.net/20170209212857312
实验现象如下:
在没有按下按键的情况下LED0和LED1亮,LED3和LED4熄灭,说明反相器真的起作用了,对于没有设置了反相器的KEY0和KEY2芯片读到的是1也就是IO口的状态高电平,对于设置了反相器的KEY2和KEY3情况则恰好相反,因为IO口的状态是高电平取反后为0,所以芯片读到的值为0.
对于中断,按下KEY0和KEY2相应的LED并没有马上闪烁,而要等到松开按键后LED才闪烁,也就是说这时候芯片识别的是IO口的上升沿中断,而对于设置了反相器的KEY2和KEY3情况则恰好相反,当按下了按键后LED马上会闪烁,而松开的时候没有任何的作用,也就是说这时候芯片识别的是这两个IO口的下降沿。
总结如下:
没有设置反相器(polarity设置为0):芯片读到的状态就是IO口的状态,芯片识别IO口的上升沿中断
设置反相器(polarity设置为1):芯片读到的状态是IO口的反状态,芯片识别IO口的下降沿中断

这里上传上本实验所提到的代码:ownload.csdn.net/detail/chengdong1314/9751264

FLASH空间问题
下面是SYD8801的存储器分配:
http://img.blog.csdn.net/20170217091423197
这里对FLASH空间的分配说明一下:
128KFLAH分出了96KB给代码使用,这里96KB代码又分为两个48KB,一个为用户运行的代码空间,一个为备份空间,下载程序的时候其实是把程序拷贝到备份空间,然后跳到备份空间运行,这时候运行代码空间和备份空间就交换了角色。
另外的32KB中有4KB作为4Ksetting,也就是我们下载进去的4Ksetting
剩下有28KB,其中又有4KB给用户使用,这4KB中1KB保存配对绑定信息,剩下的3KB给用户使用,也就是可以操作的3KBflash
最后还剩下24KB,这部分空间目前没有使用,保留,代码也可以使用。
因为Code RAM是48KB,所以数字电路在启动的时候只会从FLASH拷贝48KB的代码到内存中,所以用户代码最大是48KB,当然如果用户代码中做了从flash中拷贝代码到内存中运行的功能, 整体来看用户代码可以做到96KB+24KB=120KB的大小,但是因为Code RAM是48KB,所有如果进行代码拷贝工作的话,之前的代码就会被覆盖掉,所有代码拷贝要十分的小心了!
关于芯片内部flash的空间安排请看下图:
http://img.blog.csdn.net/20170713182009358


看门狗计数单位
手册中对看门狗的解释如下:
http://img.blog.csdn.net/20170217093702207
但是在代码中:
http://img.blog.csdn.net/20170217093751145
这是因为虽然看门狗的时钟来自于32.768Khz,但是在看门狗电路中做了256倍的分频工作,也就是说看门狗计数的时基是:32768/256=128Hz,那么看门狗的周期是:1/128s=0.0078125s=7.8125ms


kydl2345 发表于 2018-5-11 08:23:38

敢问楼主做广告付钱了吗?
页: [1]
查看完整版本: SYD8801片内外设配置【IO口反相器设置】【FLASH空间分配】 ...