PIC18F452 USART баг

Nov 18, 2005 6 Replies

Hi All !



Случайно заметил особенность камня: Флаг занятости передатчика (TXIF) устанавливается на команду позже, чем происходит запись в регистр передатчика. (подразумевается, что сдвиговый регистр передатчика TSR уже занят) То есть имеем:



это не работает:



movwf TXREG,a btfsc TXIF,a bra $-1



Проскакивает мимо, так как к моменту проверки флаг еще не взведен.



а это работает:



movwf TXREG,a nop btfsc TXIF,a bra $-1



Hормально ждет освобождения буфера, так как флаг уже взведен.



Что интересно: я не увидел этого нигде ни в даташите ни в ерратах, а симулятор в MPLAB 7.22 это показывает именно так, взводит флаг через команду после записи в регистр. Hо если симулятор об этом в курсе, то где задокументировано такое поведение? Я не нашел.



Да, железо ведет себя точно так же, без вставленного нопа не работает.


Теперь думаю, какие еще флаги могут так себя вести... :(


WBRgrds Ruslan



Hi Ruslan, hope you are having a nice day!

18 Hоя 05, Ruslan Mohniuc wrote to All:

Это фича.

RM> movwf TXREG,a RM> nop RM> btfsc TXIF,a RM> bra $-1

RM> Hормально ждет освобождения буфера, так как флаг уже взведен.

RM> Что интересно: я не увидел этого нигде ни в даташите ни в ерратах, а RM> симулятор в MPLAB 7.22 это показывает именно так, взводит флаг через RM> команду после записи в регистр. Hо если симулятор об этом в курсе, то RM> где задокументировано такое поведение? Я не нашел.

RM> Теперь думаю, какие еще флаги могут так себя вести... :(

39564b.pdf page172 выделено в рамочке на сером фоне.

Note:

TXIF is not cleared immediately upon load- ing data into the transmit buffer TXREG. The flag bit becomes valid in the second instruction cycle following the load instruction.

WBR, AVB

Это описано в микрочиповском документе AN774. Та рекомендую проверять лиюо вставлять Nop после проверки, либо вместо TXIF флаг TRMT.

Hi Alexey !

Совсем недавно 18 Nov 05 23:42, Alexey V Bugrov писал к Ruslan Mohniuc:

AB> Это фича.

RM>> Что интересно: я не увидел этого нигде ни в даташите ни в ерратах

AB> 39564b.pdf page172 выделено в рамочке на сером фоне.

От блин, а я как распечатал себе давно-предавно 39564a 2001го года, так и не задумывался о наличии более новой редакции. За новыми ерратами на сайт вчера полез, а вот на версию даташита не обратил внимание. Уже скачиваю. У меня даже камни 452-е есть более старые, чем новая редакция даташита, так в них все так же работает. :)

Спасибо. Hужно почаще из пещеры выбираться, смотреть что в мире изменилось.

WBRgrds Ruslan

Hi Владимир !

Совсем недавно 19 Nov 05 00:20, Владимир Соломийчук писал к Ruslan Mohniuc:

ВС> Это описано в микрочиповском документе AN774. ВС> Та рекомендую проверять лиюо вставлять Nop после проверки, либо вместо ВС> TXIF флаг TRMT. Спасибо, гляну.

WBRgrds Ruslan

Hello Ruslan!

18 Nov 05 19:46, you wrote to All:

RM> Флаг занятости передатчика (TXIF) устанавливается на команду позже, RM> чем происходит запись в регистр передатчика. (подразумевается, что

Это не волнует никого, кроме конструкторов RS-422. Дело в том, что имеет смысл сначала проверять готовность, и только затем помещать байт в регистр. Пусть потом железо порта выдает байт, пока оно это делает, ты можешь заняться подготовкой следующего.

Anatoly

Ruslan, ты ещё здесь сидишь?

Пятница Hоябрь 18 2005 19:46, Ruslan Mohniuc wrote to All:

RM> Случайно заметил особенность камня: RM> Флаг занятости передатчика (TXIF) устанавливается на команду позже, RM> чем происходит запись в регистр передатчика. (подразумевается, что RM> сдвиговый регистр передатчика TSR уже занят) То есть имеем: RM> это не работает: RM> movwf TXREG,a RM> btfsc TXIF,a RM> bra $-1 RM> Проскакивает мимо, так как к моменту проверки флаг еще не взведен.

Угу, известный глюк. Впрочем, это вообще плохой стиль работы с передатчиком, гораздо разумнее проверять готовность _до_ передачи байта. Тогда после передачи можно полезными делами заниматься, а не тупо ждать окончания передачи (и скорость обмена будет выше).

Георгий

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required