47600 (597343), страница 7
Текст из файла (страница 7)
Рис. 6.1. Пример подключения внешнего микроконтроллера PIC в режиме PSP
Для управления режимом PSP используется регистр TRISE (рис. 6.2).
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
IBF | OBF | IBOV | PSPMODE | – | TRISE2 | TRISE1 | TRISE0 |
Рис. 6.2. Регистр TRISE микроконтроллеров PIC
Режим PSP активизируется путем установки в лог. 1 разряда PSPMODE. Прерывания разрешаются установкой в лог. 1 разряда PSPIE (разряд 7) регистра PIE1, а запросы формируются в разряде PSPIF (разряд 7) регистра PIR1. С помощью разрядов 0-2 регистра TRISE осуществляется выбор режима для соответствующих разрядов порта Е.
Когда на линиях CS и RD (выводы RE2 и RE0) одновременно появляется низкий уровень сигнала, содержимое регистра OUTREG выводится через порт D. При записи в регистр OUTREG устанавливается в лог, 1 разряд OBF регистра TRISE – это означает, что выходной буфер заполнен данными. После передачи данных разряд OBF автоматически сбрасывается в лог. 0.
Когда на линиях CS и WR (выводы RE2 и RE1) одновременно появляется низкий уровень сигнала, осуществляется прием данных через порт D. Принятая величина сохраняется в регистре INREG, при этом автоматически устанавливается в лог. 1 разряд IBF регистра TRISE. После программного считывания содержимого регистра INREG этот разряд автоматически сбрасывается в лог. 0.
Если ранее принятый байт не считывается до поступления следующего байта в регистр INREG, устанавливается в лог. 1 разряд IBOV регистра TRISE, указывающий на переполнение входного буфера.
Последовательный ввод/вывод
В отличие от параллельного обмена данными, в случае последовательного ввода/вывода используется только одна информационная линия. При этом передача данных бывает асинхронной и синхронной.
При синхронном последовательном вводе/выводе синхронизируется передача отдельных битов данных с помощью одновременно передаваемого тактового сигнала. Синхронная последовательная передача данных применяется, на уровне печатных плат, в том числе – для обмена данными между различными интегрированными блоками в составе схемы микроконтроллера и различными периферийными схемами (например, для обработки видеосигнала).
В противоположность этому, при асинхронной передаче данных передается не тактовый сигнал, а старт-бит и стоп-бит, определяющие начало и завершение передачи слова данных (рис. 7.1).
Рис. 7.1. Типичный формат асинхронной передачи данных (в данном примере – байта 10000010)
Главной областью применения асинхронной передачи данных, является не обмен данными в составе схемы, а коммуникация между блоками, разделенными пространственно и обладающими признаками собственного интеллекта. В качестве примера можно назвать связь между персональным компьютером и принтером, модемом, программирующим устройством или регистратором данных.
В микроконтроллерах AVR асинхронная передача данных осуществляется с помощью приемопередатчика UART, а в микроконтроллерах PIC – приемопередатчика USART или по шине CAN. Для синхронного ввода/вывода используется особый режим приемопередатчика USART, а также интерфейсы SPI и I2С (в микроконтроллерах PIC – с помощью порта MSSP).
-
-
Приемопередатчик UART микроконтроллеров AVR
Для работы UART выделены в общей сложности четыре регистра:
-
регистр управления UCR (адрес в области ввода/вывода – 0х0А, адрес SRAM – 0х2А) – предназначен для управления функциями приемопередатчика и для разрешения/запрета прерываний от UART (рис. 7.2);
-
регистр состояния USR (адрес в области ввода/вывода – 0x0В, адрес SRAM –0x2В) (рис. 7.3);
-
регистр данных UDR (адрес в области ввода/вывода – 0х0С, адрес SRAM – 0x2С) – физически состоит из двух регистров, обращение к которым осуществляется по одному и тому же адресу; один из них используется для передачи, а другой – для приема данных;
-
регистр UBRR (адрес в области ввода/вывода – 0x09, адрес SRAM – 0x29) – применяется для настройки требуемой скорости передачи данных с помощью встроенного контроллера, позволяющего устанавливать наиболее распространенные скорости передачи по стандарту RS232C.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
RXCIE | TXCIE | UDRIE | RXEN | TXEN | CHR9 | RXB8 | TXB8 |
Рис. 7.2. Регистр управления UCR микроконтроллеров AVR
Если разряд RXCIE и разряд общего разрешения прерываний I в регистре состояния SREG установлены в лог. 1, то разрешается прерывание по завершению приема через UART.
Если разряд TXCIE и разряд общего разрешения прерываний I в регистре состояния SREG установлены в лог. 1, то разрешается прерывание по завершению передачи через UART.
Если разряд UDRIE и разряд общего разрешения прерываний I в регистре состояния SREG установлены в лог. 1, то разрешается прерывание по опустошению регистра данных UART.
Если разряд RXEN установлен в лог. 1, то происходит разблокирование приемника, и вывод 0 порта D становится входом UART. Если разряд RXEN содержит лог. 0, то принимающий элемент приемопередатчика UART блокируется, и вывод 0 порта D может использоваться в качестве обычного входа/выхода. Если разряд RXEN содержит лог. 0, то флаги OR и FE регистра состояния USR не могут быть установлены. Если эти флаги все же установлены, то они с помощью RXEN не сбрасываются.
Если разряд TXEN установлен в лог. 1, то происходит разблокирование передатчика, а вывод 1 порта D становится выходом UART. Если разряд TXEN содержит лог. 0, то передающий элемент UART блокируется, и вывод 1 порта D может использоваться в качестве обычного входа/выхода. Если разряд TXEN во время процесса передачи устанавливается в лог. 0, то передатчик не блокируется до тех пор, пока текущий символ в сдвиговом регистре, а также символ, возможно, ожидающий на передачу в регистре UDR не будут полностью переданы.
Если разряд CHR9 установлен в лог. 1, то слова данных, подлежащие передаче/считыванию имеют длину 11 бит (9 разрядов данных плюс стартовый и стоп-бит). Девятый бит из разряда ТХВ8 при передаче попадает в UCR, а при приеме – в разряд RXB8 регистра UCR. Девятый бит может быть использован для размещения дополнительных информационных данных, например, в качестве бита четности или второго стоп-бита. Если разряд CHR9 установлен в лог. 0, то слова данных, подлежащие передаче/считыванию имеют длину 10 бит (8 разрядов данных плюс стартовый и стоп-бит).
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
RXC | TXC | UDRE | FE | OR | – | – | – |
Рис. 7.3. Регистр состояния USR микроконтроллеров AVR
Регистр состояния USR информирует программу пользователя о состоянии приемопередатчика UART.
Флаг RXC устанавливается в лог. 1, если принятое слово данных было перенесено из сдвигового регистра в регистр UDR (без учета возможных ошибок кадрирования, которые могли возникнуть во время передачи данных). После чтения регистра UDR флаг RXC автоматически сбрасывается в лог. 0.
Флаг ТХС будет установлен в лог. 1, если символ в сдвиговом регистре был передан полностью (то есть, включая стоп-бит), и из регистра UDR не ожидается новый байт данных. Флаг очень полезен в полудуплексном режиме работы, когда непосредственно после передачи необходимо переключиться в режим приема. При входе в подпрограмму обработки прерывания флаг завершения передачи ТХС аппаратно сбрасывается в лог. 0.
Флаг UDRE устанавливается в лог. 1, если содержимое регистра UDR было перенесено в сдвиговой регистр. С его помощью пользователь получает уведомление о том, что приемопередатчик готов к передаче нового байта.
Соответствующая подпрограмма обработки прерывания выполняется до тех пор, пока установлен флаг UDRE. Флаг UDRE сбрасывается при записи байта данных в регистр UDR. В случае сброса при включении питания флаг UDRE устанавливается в лог. 1, чтобы показать, что приемопередатчик готов к передаче нового байта данных.
Флаг FE устанавливается в лог. 1 при обнаружении ошибки кадрирования. Это происходит, если при трех сканированиях стоп-бита был более одного раза обнаружен лог. 0, и тем самым стоп-бит был распознан как сигнал низкого уровня. Флаг FE сбрасывается, когда стоп-биту соответствует сигнал высокого уровня. Пользовательская программа должна постоянно проверять флаг FE перед чтением регистра UDR, чтобы можно было распознать потенциально некорректный символ в регистре приема.
Флаг OR устанавливается в лог. 1, если один из символов, переданных в регистр UDR из сдвигового регистра, не был прочитан перед следующим поступившим символом. Этот флаг обновляется после считывания действительного символа из регистра UDR, поэтому пользовательская программа должна всегда проверять флаг OR после чтения регистра UDR, чтобы распознать потерю одного поступившего символа. Флаг OR сбрасывается при переносе считанного символа в регистр UDR.
-
Настройка скорости передачи данных через UART
В приемопередатчик UART встроен специальный контроллер скорости передачи данных, представляющий собой делитель частоты для определения скорости передачи данных на основании такта системной синхронизации.
Скорость передачи может быть вычислена по следующему уравнению:
где fBaud – скорость передачи в бодах, Ф – такт системной синхронизации; UBRR – содержимое 8-разрядного регистра UBRR (0...255).
Значения, записываемые в регистр UBRR для наиболее распространенных скоростей передачи данных, представлены в табл. 7.1.
Таблица 7.1. Значения регистра UBRR для наиболее распространенных скоростей передачи данных и частоты работы кварцевого осциллятора
Скорость передачи данных, бод | 1,8432 МГц | Погрешность (%) | 3,6864 МГц | Погрешность (%) | 4 МГц | Погреш ность (%) |
1200 | UBRR = 95 | 0,0 | UBRR = 191 | 0,0 | UBRR = 207 | 0,2 |
2400 | UBRR = 47 | 0,0 | UBRR = 95 | 0,0 | UBRR = 103 | 0,2 |
4800 | UBRR = 23 | 0,0 | UBRR = 47 | 0,0 | UBRR = 51 | 0,2 |
9600 | UBRR = 11 | 0,0 | UBRR = 23 | 0,0 | UBRR = 25 | 0,2 |
14400 | UBRR=7 | 0,0 | UBRR=15 | 0,0 | UBRR = 16 | 2,1 |
19200 | UBRR=5 | 0,0 | UBRR = 11 | 0,0 | UBRR=12 | 0,2 |
2400 | UBRR = 207 | 0,2 | UBRR = 287 | – | UBRR = 312 | – |
4800 | UBRR = 103 | 0,2 | UBRR = 143 | 0,0 | UBRR = 155 | 0,2 |
9600 | UBRR = 51 | 0,2 | UBRR = 71 | 0,0 | UBRR = 77 | 0,2 |
14400 | UBRR = 34 | 0,8 | UBRR = 47 | 0,0 | UBRR = 51 | 0,2 |
19200 | UBRR = 25 | 0,2 | UBRR = 35 | 0,0 | UBRR = 38 | 0,2 |
Значения, выделенные курсивом, превышают 255, и потому не могут быть установлены в регистре UBRR, имеющем длину всего 8 разрядов. Если потребуется соответствующая скорость передачи данных, то необходимо переходить на более низкие частоты колебаний кварцевого осциллятора.
-
-
Приемопередатчик USART микроконтроллеров PIC
В микроконтроллерах PIC скорость обмена данными через приемопередатчик USART задается восьмиразрядным счетчиком во взаимодействии с регистром SPBRG. Когда содержимое счетчика и регистра SPBRG совпадает, счетчик сбрасывается в нуль. На значение скорости передачи через USART также влияет состояние разряда BRGH регистра управления TXSTA (рис. 1.32). Этот разряд определяет, какая требуется скорость для передачи данных: высокая (BRGH = 1) или низкая (BRGH = 0).