PIC32 – описание регистров портов ввода вывода

Visits: 1294


Для работы с портами ввода вывода необходимо разобраться как эти потами управлять.

В описываемом контроллере PIC32MX795F512H присутствует 6 портов, доступны следующие порты

Порт RB  доступные разряды 0-1-2-3-4-5-6-7-8-9-10-11-12-13-14-15
Порт RC доступные разряды 12-13-14-15
Порт RD доступные разряды 0-1-2-3-4-5-6-7-8-9-10-11
Порт RE доступные разряды 0-1-2-3-4-5-6-7
Порт RF доступные разряды 0-1-3-4-5
Порт RG доступные разряды 2-3-6-7-8-9

Регистры управления и контроля, по умолчанию (состояние при подаче описания) необходимо смотреть в описании конкретного контроллера.

TRISх – регистр управления направлением передачи цифровых данных. Пример инициализации, все выводы на передачу данных из микроконтроллера, кроме RB0 на ввод информации, представления в двоичном виде более наглядно дает представление какой разряд настроен на какое направление. И в таком варианте мы одной командой настраиваем сразу весь порт.

TRISB =	0b0000000000000001;		// регистр направления данных

PORTх – регистр информации о состоянии сигналов на выводах порта микроконтроллера. Считывая информацию с этого регистра мы можем увидеть какие сигналы реально присутствуют на выводах порта. Пример инициализации порта. В порт можно писать, при этом компилятор переопределяет запись в регистр LAT.

PORTB =	0;                              // регистр приема данных

LATх – регистр управления состоянием выходного буфера, регистр передаваемых данных. Запись 1 в этот регистр позволяет установить высокий уровень на выходе порта, 0 – в низкий. Пример инициализации порта:

LATB =	0;                              // регистр передаваемых данных

ODCх – регистр управления для переключение порта для функции “открытого коллектора” или стока. Многие приложения требуют для подключения в варианте “замыкания” внешнего сигнала на массу, без возможности подачи в линию высокого уровня.

ODCB =	0;                              // регистр настройки открытого коллектора

CNPUE – регистр подключения к выводу порта подтягивающего резистора. При установки соответствующего разряда в 1 на соответствующем входе подключается подтягивающий резистор и соответственно при чтение данных с этого порта будет считываться высокий уровень. инициализация регистра – отключить все резисторы.

CNPUE   =   0;                              // регистр управления подтягивающими резисторами

Внимание, как определить какой бит регистра соответствует какому выводу. На схеме микроконтроллера при описании выводов есть обозначение CN. Например, соответствие обозначение CNPUE2 соответствует на схеме CN2.

CNPUE = 0b0000000000000100;                 // установить подтягивающий резистор на входе RB0

Нововведением – это регистры установки, сброса и инверсии бита порта SET, INV, CLR. Эти регистры позволяют одной операций выполнить необходимую функцию, подобными регистрами обладают многие регистры микроконтроллера, для установки, сброса или инверсии необходимо использовать маску, значение в маске “1” оказывает воздействие на  текущий бит, если “0” значение бита не изменяется.

Написание регистров на примере регистра порта В – LATBSET, LATBCLR, LATBINV.

Например, установить в 1 на выводе порта RB13, биты в состоянии 1 устанавливаются, в состоянии 0 не изменяются.

PORTBSET = 0b0010000000000000;              // установить RB13 -> 1

Сбросить в 1 на выводе порта RB13, биты в состоянии 1 устанавливаются, в состоянии 0 не изменяются.

LATBCLR = 0b0010000000000000;               // сбросить RB13 -> 1

Инвертировать в 1 на выводе порта RB13, биты в состоянии 1 устанавливаются, в состоянии 0 не изменяются.

LATBINV = 0b0010000000000000;               // инвертировать RB13 -> 1

Пример:

//например описываем бит расположения светодиода

#define LED01 0x1000

//включаем его на порту В

LATBSET = LED01

 

Регистр контроля изменения состояния на порту микроконтроллера.

CNCON регистр управления

В этом регистре все го два бита управления. Бит ON – включает или выключает функцию контроля, бит SIDL – разрешает работу функции в режиме ожидания (idle). например, в программе

    //регистр контроля - функция по изменению состояния на входах
    CNCONbits.ON=0;                         // отключен
    CNCONbits.SIDL=0;                       // в режиме ожидания не активна

CNEN регистр разрешения по активации функции по изменения состояния по конкретным входам. Для нашего микроконтроллера это выводы (для других контроллеров смотрите описание) по умолчанию все отключены, запись – 1 активирует функцию контроля.

CNPUE – регистр разрешения подтягивающих резисторов на входах

название – вывод
CN0             48
CN1             47
CN2             16
CN3             15
CN4             14
CN5             13
CN6             12
CN7             11
CN8             4
CN9             5
CN10           6
CN11            8
CN12           30
CN13           52
CN14           53
CN15           54
CN16           55
CN17           31
CN18           32

продолжение следует…


Поделись этим!