2011年12月10日土曜日

[ARM]Cortex-M0のIOCONレジスタとは

最近LPC1114のGPIOでLEDを制御したとき、「制御できるピン」と「制御できないピン」

があることに気づき、

マニュアルで調べると一つのピンにモードがあることに気がついた。 (A/Dモード、GPIO、etc...)

よくよく見れば基板のピン横にモードが書いてあり、マニュアルを見なくても大体は検討がつくと思う。


けれど、最初は全く気にせず、

GPIOの入出力モードとデータを書き込んでいたため、LEDがぼんやり光るだけで制御出来ていなかった。

それもそのハズで、GPIOとして使っていたピンが

なんと最初からA/Dモードで初期化されていたため見当違いな事をしていたことになる。


そうなると、今まで用途が半固定されていたIOが開放されより多くのIOが制御できるようになると思う。

詳細は省くが、PIO1_0のIOCONを他のモードにするには

#include "LPC11xx.h"

int main(void){
         //初期化項目
          LPC_IOCON->R_PIO1_0   = 0xd1;       //PIO1_0のIOCONをAD→GPIOにする。
      
         //ポートの入出力の方向
          LPC_GPIO1->DIR = 0x01;                      //GPIO1の0bit目を出力方向にする。

         //GPIOのアドレスにデータを書き込む
           LPC_GPIO->DATA = 0x01;                   //GPIO1の0bit目を「1(high)」書き込んだ
}

という形で、モードと方向性、DATAに書き込みができるようになった。

 ピンの構成やピン名はCMSYSのLPC11xx.h->Pin Connect Block (IOCON)
の項目に記載されているので、参照して正しいピン名を指定してください。


まずはこんなところでLEDによるシフトカウンタを作ろうと思う。


(やれやれLCDまでまだ道が長そうだ...)


参考文献 
Cortex-M0ボード:ハードの基礎・マニュアルの読み方
 http://masato-ishikawa.blogspot.com/2011/07/cortex-m0.html

この方のHPは一読したほうが理解しながら進められると思う。

0 件のコメント:

コメントを投稿