これが私の定義です:
/* General Purpose Input/Output (GPIO) */
#define IOPIN (*((volatile unsigned long *) 0xE0028000))
#define IOSET (*((volatile unsigned long *) 0xE0028004))
#define IODIR (*((volatile unsigned long *) 0xE0028008))
#define IOCLR (*((volatile unsigned long *) 0xE002800C))
コード:
void put_on_other_port (void) {
asm("LDR R0, 0x00000080");
asm("STR R0, [0x00100000]");
}
LPC2148用にプログラミングしていて、P0.7の内容をP0.20に移動するためのARMアセンブラコードを書き込もうとしています。私はアセンブリ構文にまったく精通していないので、このコードを修正しようとすると、あらゆる種類のコンパイルエラーが発生します。P0.7のビットを(アセンブラコードで)P0.20に簡単に移動するにはどうすればよいですか?
これをCコードで試しました:
IODIR |= 0x00100000;
.
.
.
if (IOPIN & 0x00000080)
IOSET = 0x00100000;
else
IOCLR = 0x00100000;
しかし、どちらも機能しませんでした。P0.20で出力が得られませんでした。
CコードでPWMをシミュレートしてみました:
IODIR |= 0x00100000;
.
.
.
int i;
IOSET = 0x00100000;
for (i = 0; i < 10000; i++);
IOCLR = 0x00100000;
for (i = 0; i < 10000; i++);
P0.20の値を無条件に設定してみました。
//IOSET = 0x00100000; // commenting out to toggle between setting and clearing
IOCLR = 0x00100000;