GBAmultiBoot时的Arduino端针脚控制的程序编写~

来源:互联网 发布:你画我猜源码 编辑:程序博客网 时间:2024/04/30 00:34
开始的时候我是打算用Arduion自带的库来控制针脚的,但是由于那个库里面函数为了兼容各版本的板子,所以有很多多余的代码。也因为这些代码使得执行起来会错过时钟周期,毕竟频率太快了,一个间隔只有138个时钟周期,GBA 32位NORMAL模式频率就更快。结果就只能用AVR的编程方法来写。
Arduino的针脚定义

上图可以看到芯片的针脚定义跟对应该在arduino上的引脚。比如LED是13号脚对应的是芯片的PB5。从命名上看会看到PB、PC、PD三组,别问我PA去哪了,我也不知道。我到现在只学习过PB,别的脚是不是也是这样控制我也不清楚,不过从PB来看AVR每一组针脚是由DDR、PORT、PIN三个寄存器来控制的。像Arduino的库函数digitalWrite(13)执行起来慢是因为他在函数时会去找这13号脚所对应的寄存器的地址。在平时应该的时候这点消耗可以不计,但是这回需要高速执行就不行了,会错过时序周期。
这三个寄存器每一位代表一个脚。
DDR:是设置针脚的模式,1为输出,0为输入。
PORT:的设置看DDR,如果是DDR设置为输出,这设置1为高电平,0为低电平。当针脚的模式是为输入,则1为上位输入,0为普通。具体上位输入是什么,我现在还没搞清楚,有空再实验一下吧。
PIN:就是针脚的输入情况,输入为高电平时,相对应该的位为1,反则为0。


这次的程序时只用到PB四个脚。首先定义了GBA_DDR、GBA_OUT、GBA_IN三个宏,分别对应DDRB、PORTB、PINB。也定义了SI、SO、SD、SC在寄存器对应的位置。分别对应该Arduion的8、9、10、11。注意连接方式是SI接GBA的SO,SO接GBA的SI,SC接GBA的SC,SD接GBA的SD。我这里时模拟了GBA的行为,所以命名与GBA一致,连接方式也如GBA连接GBA一样。这样连接可以同时兼容GBA的两种通信协议。但注意在GBA的Multi-player模式下SI接地的为主机,所以这时Arduion的SO应该为高,GBA会自己把自己设置成副机。

原创粉丝点击