68HC12ボードでSC1DRLレジスタに書き込むことはできません - 何が欠けていますか?
質問
私は68HC12で複数のシリアルインターフェイスを使用するために書き込もうとしていますが、それを話すことはできません。 SC1DRLレジスタ(SCI Data Register Low)に書き込むことができないように問題を分離したと思います。
以下は私のSci ISRからです:
else if (HWRegPtr->SCI.sc1sr1.bit.tdre) {
/* Transmit the next byte in TX_Buffer. */
if (TX_Buffer.in != TX_Buffer.out || TX_Buffer.full) {
HWRegPtr->SCI.sc1drl.byte = TX_Buffer.buffer[TX_Buffer.out];
TX_Buffer.out++;
if (TX_Buffer.out >= SCI_Buffer_Size) {
TX_Buffer.out = 0;
}
TX_Buffer.full = 0;
}
/* Disable the transmit interrupt if the buffer is empty. */
if (TX_Buffer.in == TX_Buffer.out && !TX_Buffer.full) {
Disable_SCI_TX();
}
}
TX_BUFFER.BUFFERは、その内容がhwregptr-> sci.sc1drl.byteに書き込まれている場合、インデックスTX_Buffer.outで正しいものを持っていますが、デバッガーは変更を示しておらず、シリアルインターフェイスを介してデータが送信されていません。
誰かが私が何が欠けているのか知っていますか?
編集:
hwregptrは次のように定義されています。
extern HARDWARE_REGISTER *HWRegPtr;
Hardware_registerは、すべてのレジスタが含まれる巨大な構造体であり、揮発性です。
解決
SC1DRLは書き込み専用レジスタである可能性があります(公式レジスタドキュメントを確認してください - Googleは私に適したPDFを上げていません)。つまり、コードを確認するために(ターゲットインデバッガーでも)読み戻すことができません。
hwregptrはどのように定義されていますか?持っていますか volatile
コンパイラがそのポインターを通してすべての書き込みをすぐに起こさなければならない何かとして扱うようにするための適切な場所で?
所属していません StackOverflow