これらのアイテムは過去の互換性をとるために提供されています。そのため、以前のバージョンのライブラリの元で書かれた古いソースコードの保守を容易にして、その寿命をのばすことができます。これらのアイテムを新しいコードに用いるのはおやめください。
|
個々の「system-wide interrupts」許可? |
I全割り込み許可に加えて、割り込みが必要な機能に対応する個々の割り込み許可も必要です。いくつかの周辺装置は割り込み許可ビットをコントロールレジスタセット内に持っていますが、外部割り込みとタイマ割り込みについては、「system-wide設定レジスタ」を持っています。
※複数の周辺装置の割り込み許可ビットが一つのレジスタに集まっていることを言っているのでしょうか??
In addition to globally enabling interrupts,
each device's particular interrupt needs
to be enabled separately if interrupts for
this device are
desired. While some devices maintain their
interrupt enable bit inside the device's
register set, external and timer interrupts
have system-wide configuration registers.
たとえば、 - Note:
- この関数は十分注意してお使いください。既に異なる割り込み許可を行っている場合、この関数は指定以外の割り込み許可を取り消してしまいます。
|
#define | enable_external_int(mask) (__EICR = mask) |
#define | INTERRUPT(signame) |
static __inline__ void | timer_enable_int (unsigned char ints) |
旧来の I/O マクロ |
AVR-GCC とavr-libc がI/Oポートを現在のように直接扱えなかった頃、全てのI/Oポートアクセスは特別なマクロを介して行い、これをインラインアセンブラに変換して必要な動作を行わせていました。
これらのマクロは、表現式の中でI/Oポートをその名前で読み書きし、C言語のbit操作によりI/Oのbit操作ができるようになって以降、廃止されました。 これらのマクロは、過去のマクロをシミュレートします。これらはI/Oポートに適応されることを想定されていますが、エミュレーションは実際にはC言語の表現式による方法を使っています。そのためこのマクロはメモリに対しても利用可能です。
|
#define | inp(port) (port) |
#define | outp(port, val) (port) = (val) |
#define | sbi(port, bit) (port) |= (1 << (bit)) |
#define | cbi(port, bit) (port) &= ~(1 << (bit)) |