mpusu_avr_p2
.pdf20.12.2017
Центральное процессорное устройство AVR
Блок режимов энергопотребления
Для управления и задания режимов пониженного энергопотребления предназначен регистр MCUCR (MCU Control Register)
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
MCUCR |
SM2 |
SE |
SM1 |
SM0 |
ISC11 |
ISC10 |
ISC01 |
ISC00 |
Чтение/запись |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
Нач. значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Бит 6 – SE: Разрешение перехода в режим пониженного энергопотребления. При установке в 1 разрешает перевод в режим пониженного энергопотребления, в противном случае не производит никаких действий.
Биты 7,5,4 – SM2, SM1, SM0: Выбор режима пониженного энергопотребления в соответствии с таблицей
SM2 |
SM1 |
SM0 |
Режим |
0 |
0 |
0 |
Idle |
0 |
0 |
1 |
ADC Noise Reduction |
0 |
1 |
0 |
Power Down |
0 |
1 |
1 |
Power Save |
1 |
0 |
0 |
Зарезервировано |
1 |
0 |
1 |
Зарезервировано |
1 |
1 |
0 |
Standby |
1 |
1 |
1 |
Extended Standby |
21
Голик С.Е.
Организация памяти микроконтроллеров AVR
Структура памяти в микроконтроллерах AVR
•гарвардская архитектура
•16-разрядная память программ
•8-разрядное статическое ОЗУ
•постоянная память данных
22
Голик С.Е.
11
20.12.2017
Организация памяти микроконтроллеров AVR
Структура памяти микроконтроллера ATmega16A
23
Голик С.Е.
Организация памяти микроконтроллеров AVR
Регистры-указатели
24
Голик С.Е.
12
20.12.2017
Организация памяти микроконтроллеров AVR
Регистры ввода-вывода микроконтроллера ATmega16A
Устройство |
Название |
Адрес |
Функция |
|
|
|
SREG |
$3F ($5F) |
Регистр состояния |
|
|
SPH |
$3E ($5E) |
Указатель стека, старший байт |
|
|
SPL |
$3D ($5D) |
Указатель стека, младший байт |
|
|
SPMCR |
$37 ($57) |
Регистр управления памятью программ |
Общие |
MCUCR |
$35 ($55) |
Регистр управления МК |
|
|
|
MCUCSR |
$34 ($54) |
Регистр управления и состояния МК |
|
|
OSCCAL |
$31 ($51) |
Регистр калибровки тактового генератора |
|
|
OCDR |
Регистр внутрисхемной отладки |
|
|
|
|
||
|
|
SFIOR |
$30 ($20) |
Регистр специальных функций |
|
|
PORTA |
$1B ($3B) |
Регистр данных порта А |
|
|
DDRA |
$1A ($3A) |
Регистр направления данных порта А |
|
|
PINA |
$19 ($39) |
Выводы порта А |
|
|
PORTB |
$18 ($38) |
Регистр данных порта B |
|
|
DDRB |
$17 ($37) |
Регистр направления данных порта B |
Порты ввода- |
|
PINB |
$16 ($36) |
Выводы порта B |
вывода |
PORTC |
$15 ($35) |
Регистр данных порта C |
|
|
|
DDRC |
$14 ($34) |
Регистр направления данных порта C |
|
|
PINC |
$13 ($33) |
Выводы порта C |
|
|
PORTD |
$12 ($32) |
Регистр данных порта D |
|
|
DDRD |
$11 ($31) |
Регистр направления данных порта D |
|
|
PIND |
$10 ($30) |
Выводы порта D |
25
Голик С.Е.
Организация памяти микроконтроллеров AVR
Регистры ввода-вывода микроконтроллера ATmega16A
Устройство |
Название |
Адрес |
Функция |
||
Внешние |
GICR |
$3B |
($5B) |
Общий регистр управления прерываниями |
|
прерывания |
GIFR |
$3A ($5A) |
Общий регистр флагов прерываний |
||
|
TIMSK |
$39 |
($59) |
Регистр маски прерываний от T0,T1,T2 |
|
|
TIFR |
$38 |
($58) |
Регистр флагов прерываний от T0,T1,T2 |
|
|
TCNT0 |
$32 |
($52) |
Счетный регистр T0 |
|
|
TCCR0 |
$33 |
($53) |
Регистр управления T0 |
|
|
OCR0 |
$3C |
($5C) |
Регистр совпадения T0 |
|
|
TCNT1H |
$2D |
($4D) |
Счетный регистр T1, старший байт |
|
|
TCNT1L |
$2C |
($4C) |
Счетный регистр T1, младший байт |
|
|
TCCR1A |
$2F |
($4F) |
Регистр управления A T1 |
|
Таймеры/ |
TCCR1B |
$2E |
($4E) |
Регистр управления B T1 |
|
OCR1AH |
$2B |
($4B) |
Регистр совпадения A T1, старший байт |
||
счетчики |
|||||
OCR1AL |
$2A ($4A) |
Регистр совпадения A T1, младший байт |
|||
|
|||||
|
OCR1BH |
$29 |
($49) |
Регистр совпадения B T1, старший байт |
|
|
OCR1BL |
$28 |
($48) |
Регистр совпадения B T1, младший байт |
|
|
ICR1H |
$27 |
($47) |
Регистр захвата T1, старший байт |
|
|
ICR1L |
$26 |
($46) |
Регистр захвата T1, младший байт |
|
|
TCNT2 |
$24 |
($44) |
Счетный регистр T2 |
|
|
TCCR2 |
$25 |
($45) |
Регистр управления таймером/счетчиком T2 |
|
|
OCR2 |
$23 |
($43) |
Регистр совпадения T2 |
|
|
ASSR |
$22 |
($42) |
Регистр состояния асинхронного режима |
|
WDT |
WDTCR |
$21 |
($41) |
Регистр управления сторожевым таймером |
26
Голик С.Е.
13
20.12.2017
Организация памяти микроконтроллеров AVR
Регистры ввода-вывода микроконтроллера ATmega16A
Устройство |
Название |
Адрес |
Функция |
||
|
UDR |
$0C |
($2C) |
Регистр данных USART |
|
|
UCSRA |
$0B ($2B) |
Регистр управления и состояния A USART |
||
USART |
UCSRB |
$0A ($2A) |
Регистр управления и состояния B USART |
||
UBRRH |
$20 |
($40) |
Регистр скорости передачи USART, ст. байт |
||
|
|||||
|
UCSRC |
Регистр управления и состояния USART |
|||
|
|
|
|||
|
UBRRL |
$09 |
($29) |
Регистр скорости передачи USART, мл. байт |
|
|
SPDR |
$0F |
($2F) |
Регистр данных SPI |
|
SPI |
SPCR |
$0D |
($2D) |
Регистр управления SPI |
|
|
SPSR |
$0E ($2E) |
Регистр состояния SPI |
||
|
TWCR |
$36 |
($56) |
Регистр управления TWI |
|
|
TWDR |
$03 |
($23) |
Регистр данных TWI |
|
TWI |
TWAR |
$02 |
($22) |
Регистр адреса TWI |
|
|
TWSR |
$01 |
($21) |
Регистр состояния TWI |
|
|
TWBR |
$00 |
($20) |
Регистр скорости передачи TWI |
|
Компаратор |
ACSR |
$08 |
($28) |
Регистр управления и состояния компаратора |
|
|
ADCH |
$05 |
($25) |
Регистр данных АЦП, старший байт |
|
ADC |
ADCL |
$04 |
($24) |
Регистр данных АЦП, младший байт |
|
ADCSRA |
$06 |
($26) |
Регистр управления и состояния АЦП |
||
|
|||||
|
ADMUX |
$07 |
($27) |
Регистр управления мультиплексором АЦП |
|
|
EEARH |
$1F |
($3F) |
Регистр адреса EEPROM, старший байт |
|
EEPROM |
EEARL |
$1E ($3E) |
Регистр адреса EEPROM, младший байт |
||
EEDR |
$1D |
($3D) |
Регистр данных EEPROM |
||
|
|||||
|
EECR |
$1C |
($3C) |
Регистр управления EEPROM |
27
Голик С.Е.
Модуль системы прерываний
Общие сведения
28
Голик С.Е.
14
20.12.2017
Модуль системы прерываний микроконтроллеров AVR
Источники и векторы прерываний
№ |
Источник прерывания |
Мнемоника |
Адрес |
|
вектора |
||||
|
|
|
||
1 |
Внешнее прерывание 0 |
INT0 |
$0002 |
|
2 |
Внешнее прерывание 1 |
INT1 |
$0004 |
|
3 |
Совпадение таймера/счетчика Т2 |
TIMER2 COMP |
$0006 |
|
4 |
Переполнение таймера/счетчика Т2 |
TIMER2 OVF |
$0008 |
|
5 |
Захват таймера/счетчика Т1 |
TIMER1 CAPT |
$000A |
|
6 |
Совпадение «А» таймера/счетчика Т1 |
TIMER1 COMPA |
$000C |
|
7 |
Совпадение «В» таймера/счетчика Т1 |
TIMER1 COMPB |
$000E |
|
8 |
Переполнение таймера/счетчика Т1 |
TIMER1 OVF |
$0010 |
|
9 |
Переполнение таймера/счетчика Т0 |
TIMER0 OVF |
$0012 |
|
10 |
Передача по SPI завершена |
SPI, STC |
$0014 |
|
11 |
USART, прием завершен |
USART, RXC |
$0016 |
|
12 |
Регистр данных USART пуст |
USART, UDRE |
$0018 |
|
13 |
USART, передача завершена |
USART, TXC |
$001A |
|
14 |
Преобразование АЦП завершено |
ADC |
$001C |
|
15 |
EEPROM, готово |
EE_RDY |
$001E |
|
16 |
Аналоговый компаратор |
ANA_COMP |
$0020 |
|
17 |
Прерывание от модуля TWI |
TWI |
$0022 |
|
18 |
Внешнее прерывание 2 |
INT2 |
$0024 |
|
19 |
Совпадение таймера/счетчика Т0 |
TIMER0 COMP |
$0026 |
|
20 |
Готовность SPM |
SPM_RDY |
$0028 |
29
Голик С.Е.
Модуль системы прерываний микроконтроллеров AVR
Флаги и биты разрешения прерываний МК ATmega16A
Источник |
Флаг прерывания |
Бит разрешения |
|||||
Разряд |
Флаг |
РВВ |
Разряд |
Бит |
РВВ |
||
|
|||||||
Внешнее прерывание 0 |
6 |
INTF0 |
|
6 |
INT0 |
|
|
Внешнее прерывание 1 |
7 |
INTF1 |
GIFR |
7 |
INT1 |
GICR |
|
Внешнее прерывание 2 |
5 |
INTF2 |
|
5 |
INT2 |
|
|
Переполнение таймера/счетчика Т0 |
0 |
TOV0 |
|
0 |
TOIE0 |
|
|
Совпадение таймера/счетчика Т0 |
1 |
OCF0 |
|
1 |
OCIE0 |
|
|
Переполнение таймера/счетчика Т1 |
2 |
TOV1 |
|
2 |
TOIE1 |
|
|
Захват таймера/счетчика Т1 |
5 |
ICF1 |
TIFR |
5 |
TICIE1 |
TIMSK |
|
Совпадение А таймера/счетчика Т1 |
4 |
OCF1A |
4 |
OCIE1A |
|||
Совпадение В таймера/счетчика Т1 |
3 |
OCF1B |
|
3 |
OCIE1B |
|
|
Переполнение таймера/счетчика Т2 |
6 |
TOV2 |
|
6 |
TOIE2 |
|
|
Совпадение таймера/счетчика Т2 |
7 |
OCF2 |
|
7 |
OCIE2 |
|
|
USART, прием завершен |
7 |
RXC |
|
7 |
RXCIE |
|
|
Регистр данных USART пуст |
5 |
UDRE |
UCSRA |
5 |
UDRIE |
UCSRB |
|
USART, передача завершена |
6 |
TXC |
|
6 |
TXCIE |
|
|
Преобразование АЦП завершено |
4 |
ADIF |
ADCSRA |
3 |
ADIE |
ADCSRA |
|
Аналоговый компаратор |
4 |
ACI |
ACSR |
3 |
ACIE |
ACSR |
|
Передача по SPI завершена |
7 |
SPIF |
SPSR |
7 |
SPIE |
SPCR |
|
Прерывание от модуля TWI |
7 |
TWINT |
TWCR |
0 |
TWIE |
TWCR |
|
EEPROM, готово |
|
|
|
3 |
EERIE |
EECR |
|
Готовность SPM |
|
|
|
7 |
SPMIE |
SPMCR |
30
Голик С.Е.
15
20.12.2017
Модуль системы прерываний микроконтроллеров AVR
Внешние прерывания микроконтроллера ATmega16A
В микроконтроллере ATmega16A доступно 3 прерывания по внешним событиям: INT0 – сигнал на выводе INT0 (PD2);
INT1 – сигнал на выводе INT1 (PD3);
INT2 – сигнал на выводе INT2 (PB2).
Управление внешними прерываниями осуществляется заданием состояния выделенных разрядов следующего набора регистров ввода-вывода
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
MCUCR |
SM2 |
SE |
SM1 |
SM0 |
ISC11 |
ISC10 |
ISC01 |
ISC00 |
MCUCSR |
JTD |
ISC2 |
− |
JTRF |
WDRF |
BORF |
EXTRF |
PORF |
GIFR |
INTF1 |
INTF0 |
INTF2 |
− |
− |
− |
− |
− |
GICR |
INT1 |
INT0 |
INT2 |
− |
− |
− |
IVSEL |
IVCE |
SREG |
I |
T |
H |
S |
V |
N |
Z |
C |
•MCUCR (MCU Control Register) – регистр управления процессорным ядром
•MCUSR (MCU Control and Status Register) – регистр управления и состояния процессорного ядра
•GIFR (General Interrupt Flag Register) – регистр флагов внешних прерываний
•GICR (General Interrupt Control Register) – общий регистр управления прерываниями
•SREG (Status register) – регистр состояния
31
Голик С.Е.
Модуль системы прерываний микроконтроллеров AVR
Внешние прерывания микроконтроллера ATmega16A
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
GIFR |
INTF1 |
INTF0 |
INTF2 |
− |
− |
− |
− |
− |
Чтение/запись |
R/W |
R/W |
R/W |
R |
R |
R |
R |
R |
Нач. значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
• Биты 7-5 – Флаги внешних прерываний INTF1, INTF0, INTF2. При обнаружении активного сигнала на входах INT1, INT0, INT2 соответствующий флаг прерывания INTF1, INTF0, INTF2 устанавливается в 1
|
|
|
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
MCUCR |
|
|
SM2 |
SE |
SM1 |
SM0 |
ISC11 |
ISC10 |
ISC01 |
ISC00 |
||
Чтение/запись |
|
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
|||
Нач. значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ISCn1 |
ISCn0 |
|
|
|
Условия генерации прерывания |
|
|
||||
|
0 |
|
0 |
Запрос прерывания по низкому уровню на INTn |
|
|
||||||
|
0 |
|
1 |
Запрос прерывания по любому изменению состояния на INTn |
|
|||||||
|
1 |
|
0 |
Запрос прерывания по срезу сигнала на INTn |
|
|
|
|||||
|
1 |
|
1 |
Запрос прерывания по фронту сигнала на INTn |
|
|
||||||
|
|
|
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
MCUCSR |
|
JTD |
ISC2 |
− |
JTRF |
WDRF |
BORF |
EXTRF |
PORF |
|||
Чтение/запись |
|
R/W |
R/W |
R |
R/W |
R/W |
R/W |
R/W |
R/W |
|||
Нач. значение |
0 |
0 |
0 |
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
||||
|
ISC2 |
|
|
|
|
Условия генерации прерывания |
|
|
||||
|
0 |
|
Запрос прерывания по срезу сигнала на INT2 (асинхронно) |
|
|
|||||||
|
1 |
|
Запрос прерывания по фронту сигнала на INT2 (асинхронно) |
|
|
32
Голик С.Е.
16
20.12.2017
Модуль системы прерываний микроконтроллеров AVR
Внешние прерывания: разрешение прерываний
Индивидуальные разрешения
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
GICR |
INT1 |
INT0 |
INT2 |
− |
− |
− |
IVSEL |
IVCE |
Чтение/запись |
R/W |
R/W |
R/W |
R |
R |
R |
R/W |
R/W |
Нач. значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Биты 7-5 – Разрешение внешних прерываний INT1, INT0, INT2. Установка битов
INT1,INT0,INT2 в 1 разрешает прерывания по соответствующим входам. Активность сигнала на любом выводе (фронт, срез или низкий уровень) вызовет запрос прерывания, даже если вывод определен как выход.
Глобальное разрешение
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
SREG |
I |
T |
H |
S |
V |
N |
Z |
C |
Чтение/запись |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
Нач. значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Бит 7 – I: Общее разрешение прерываний. При установке в 1 разрешает все прерывания, иначе все прерывания запрещены вне зависимости от индивидуальных разрешений.
33
Голик С.Е.
Модуль системы прерываний микроконтроллеров AVR
Внешние прерывания: обобщенная схема
34
Голик С.Е.
17
20.12.2017
Модуль параллельных портов ввода-вывода
Микроконтроллер ATmega16A имеет 4 параллельных порта ввода-вывода:
PORTA, PORTB, PORTC и PORTD
Управление портами производится с помощью регистров: |
|
|
|
|||||
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
DDRA |
DDA7 |
DDA6 |
DDA5 |
DDA4 |
DDA3 |
DDA2 |
DDA1 |
DDA0 |
PORTA |
PA7 |
PA6 |
PA5 |
PA4 |
PA3 |
PA2 |
PA1 |
PA0 |
PINA |
PINA7 |
PINA6 |
PINA5 |
PINA4 |
PINA3 |
PINA2 |
PINA1 |
PINA0 |
DDRB |
DDB7 |
DDB6 |
DDB5 |
DDB4 |
DDB3 |
DDB2 |
DDB1 |
DDB0 |
PORTB |
PB7 |
PB6 |
PB5 |
PB4 |
PB3 |
PB2 |
PB1 |
PB0 |
PINB |
PINB7 |
PINB6 |
PINB5 |
PINB4 |
PINB3 |
PINB2 |
PINB1 |
PINB0 |
DDRC |
DDC7 |
DDC6 |
DDC5 |
DDC4 |
DDC3 |
DDC2 |
DDC1 |
DDC0 |
PORTC |
PC7 |
PC6 |
PC5 |
PC4 |
PC3 |
PC2 |
PC1 |
PC0 |
PINC |
PINC7 |
PINC6 |
PINC5 |
PINC4 |
PINC3 |
PINC2 |
PINC1 |
PINC0 |
DDRD |
DDD7 |
DDD6 |
DDD5 |
DDD4 |
DDD3 |
DDD2 |
DDD1 |
DDD0 |
PORTD |
PD7 |
PD6 |
PD5 |
PD4 |
PD3 |
PD2 |
PD1 |
PD0 |
PIND |
PIND7 |
PIND6 |
PIND5 |
PIND4 |
PIND3 |
PIND2 |
PIND1 |
PIND0 |
SFIOR |
ADTS2 |
ADTS1 |
ADTS0 |
− |
ASME |
PUD |
PSR2 |
PSR10 |
•DDRX (Data Direction Register) − регистр направления передачи данных;
•PORTX − регистр вывода данных
•PINX − регистр ввода данных.
•SFIOR (Special Function Input Output Register) − регистр специальных функций ввода-вывода
35
Голик С.Е.
Модуль параллельных портов ввода-вывода
Упрощенная схема взаимодействия регистров порта
DDXn = 0 – настройка разряда n порта X на ввод данных (чтение из разряда PINXn) DDXn = 1 – настройка разряда n порта X на вывод данных (запись в разряд PXn)
X = A, B, C, D – имя порта
n = 0 ÷ 7 – номер разряда порта
36
Голик С.Е.
18
20.12.2017
Модуль параллельных портов ввода-вывода
Структура портов микроконтроллера ATmega16A
PUD (бит 2 регистра SFIOR ) – отключение подтягивающих резисторов. Если бит установлен в 1, то подтягивающие резисторы всех портов отключены независимо от того, что записано в
регистры DDRx и PORTx.
37
Голик С.Е.
|
|
Модуль параллельных портов ввода-вывода |
||||||
|
|
|
Подключение подтягивающего резистора |
|||||
Регистр специальных функций ввода-вывода SFIOR |
|
|
|
|
||||
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
SFIOR |
ADTS2 |
ADTS1 |
ADTS0 |
− |
ASME |
PUD |
PSR2 |
PSR10 |
Чтение/запись |
R/W |
R/W |
R/W |
R |
R/W |
R/W |
R/W |
R/W |
Нач. значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Бит 2 – PUD: Отключение подтягивающих резисторов. Если бит установлен, то подтягивающие резисторы отключены независимо от того, что записано в DDRX и PORTX.
При сброшенном разряде подключение резистора определяется состоянием разрядов регистров DDRx и PORTx в соответствии с таблицей
DDXn |
PORTXn |
PUD |
Функция |
Резистор |
Примечания |
|
вывода |
||||||
|
|
|||||
|
|
|
||||
0 |
0 |
Х |
Вход |
Отключен |
Третье состояние (Hi-Z) |
|
0 |
1 |
0 |
Вход |
Подключен |
Режим входа с подтягивающим резистором |
|
0 |
1 |
1 |
Вход |
Отключен |
Третье состояние (Hi-Z) |
|
1 |
0 |
Х |
Выход |
Отключен |
Вывод установлен в «0» |
|
1 |
1 |
Х |
Выход |
Отключен |
Вывод установлен в «1» |
38
Голик С.Е.
19
20.12.2017
Модуль параллельных портов ввода-вывода
Настройка порта на выход
39
Голик С.Е.
Модуль параллельных портов ввода-вывода
Настройка порта на вход
40
Голик С.Е.
20