Você está na página 1de 88

EEE026 - Projetos de Sistemas Embutidos

Periféricos
Diógenes C. da Silva Jr.
DEE/UFMG
diogenes@ufmg.br

Parte 1

EEE026 – PSE – UFMG 2020 1


Periféricos

•  Interface CPU-Periférico
•  GPIO
•  Contadores e Temporizadores
•  Interface Paralela
•  DMA
•  Conversão A/D e D/A

EEE026 – PSE – UFMG 2020 2


Interface CPU – Periféricos

SFR

Special
Function
Registers

EEE026 – PSE – UFMG 2020 3


Interface CPU – Periféricos

EEE026 – PSE – UFMG 2020 4


SFR MSP430x1xx

EEE026 – PSE – UFMG 2020 5


GPIO

•  registradores •  Esquema elétrico

EEE026 – PSE – UFMG 2020 6


GPIO

•  Entrada •  Saída

EEE026 – PSE – UFMG 2020 7


GPIO

•  Teclado •  Display 7-segmentos

EEE026 – PSE – UFMG 2020 8


Acionando Motores DC

EEE026 – PSE – UFMG 2020 9


Ponte H

EEE026 – PSE – UFMG 2020 10


Polling x Interrupção
This program sets P1.0 based on state of P1.4. This program toggles P1.0 on each push of P1.4.

#include <msp430x20x3.h> #include <msp430x20x3.h>


void main(void){ void main(void){
WDTCTL = WDTPW + WDTHOLD;// Stop watchdog WDTCTL=WDTPW+WDTHOLD; // Stop watchdog
P1DIR = 0x01; // P1.0 output P1OUT = 0x10; // P1.4 hi (pullup)
P1OUT = 0x10; // P1.4 hi (pullup) P1REN |= 0x10; // P1.4 pullup
P1REN |= 0x10; // P1.4 pullup P1IE |= 0x10; // P1.4 IRQ enabled
P1IES |= 0x10; // P1.4 Hi/lo edge
while (1) { P1IFG &= ~0x01; // P1.4 IFG cleared
// Test P1.4
if (0x10 & P1IN) P1OUT |= 0x01; _BIS_SR(LPM4_bits + GIE); // Enter LPM4
else P1OUT &= ~0x01; }
}
} // Port 1 interrupt service routine
#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void) {
P1OUT ^= 0x01; // P1.0 = toggle
P1IFG &= ~0x10; // P1.4 IFG cleared
}

EEE026 – PSE – UFMG 2020 11


EEE026 – PSE – UFMG 2020 12
EEE026 - Projetos de Sistemas Embutidos
Periféricos
Diógenes C. da Silva Jr.
DEE/UFMG
diogenes@ufmg.br

Parte 2

EEE026 – PSE – UFMG 2020 13


Contagem e Temporização

•  Contagem
–  GPIO como entrada de eventos externos
•  Temporização
–  Contagem de tempo por loop de instruções ou periférico
temporizador
•  Espera ocupada
–  Loop de instruções
–  Temporizador
•  Interrupção

EEE026 – PSE – UFMG 2020 14


Contagem de Tempo

•  Uso de funções fornecidas pelo compilador/SDK


–  No CCS:
WDTCTL = WDTPW + WDTHOLD;// Hold the watchdog.
BCSCTL1 = CALBC1_1MHZ; // Set range
DCOCTL = CALDCO_1MHZ; // Set DCO step + modulation = 1MHz clock

_delay_cycles(1000); // 1ms delay at 1MHz

EEE026 – PSE – UFMG 2020 15


Contagem de Tempo - Espera Ocupada

•  Uso de loops
–  Instruções: loop finito que executa instruções sem efeitos
colaterais (gastar tempo)
unsigned int delay; // time interval duration

delay = 50000;
do { delay--} // delay loop: decrement delay
while (delay != 0); // until it becames 0

–  Temporizador: loop dependente do estado de um flag que


sinaliza o final do intervalo de tempo (time-out)
config_timer_x() // config timer
reset_timer_x(); // reset timer

While (TAxCTL & !TAIFG); // wait for time-out (TAIFG==1)


/* ^-- operação bitwise! */
EEE026 – PSE – UFMG 2020 16
MSP430 Timer_A – SRF de Controle
•  TACLR: Timer_A Clear
–  Setting this bit clears TAR, the clock divider
•  TAxCTL
logic (the divider setting remains
unchanged), and the count direction. The
TACLR bit is automatically reset and is
always read as zero.
•  TAIE: Timer_A Interrupt Enable.
–  This bit enables the TAIFG interrupt
request.
–  0b = Interrupt disabled
–  1b = Interrupt enabled
•  TAIFG: Timer_A Interrupt Flag
–  0b = No interrupt pending
–  1b = Interrupt pending

EEE026 – PSE – UFMG 2020 17


Interrupção

•  Uso de ISR – Rotina de tratamento de interrupção


–  Vetor de interrupção
–  Identificação da interrupção
–  Rotina de tratamento: variável global??
#pragma vector = TA1_VECTOR // Timer_A vector

_ _interrupt void TA1 (void)


{
if (TAxIV & 0Eh) { // Timer_Ax Int. Vector
// 0Eh source = Timer Overflow
// rotina de tratamento
}
}

EEE026 – PSE – UFMG 2020 18


Interrupção

•  Uso de ISR – Rotina de tratamento de interrupção


–  Vetor de interrupção
–  Identificação da interrupção
–  Rotina de tratamento: variável global??

EEE026 – PSE – UFMG 2020 19


Example 7.1: Using Interrupts in C
Language

Consider an MSP430F2231 with a red LED


connected to P1.2 and a hardware
debounced push-button connected to P1.3.
Write an interrupt-enabled assembly
program to toggle the LED every time the
push-button is depressed.

Solution: This problem can be solved by


setting P1.3 to trigger an interrupt every
time a high-to-low transition is detected in
the pin. The ISR just needs to toggle P1.3,
which can be done x-oring the pin bit itself
in the output port register.

EEE026 – PSE – UFMG 2020 20


Contadores e Temporizadores

•  Contadores
–  Evento externo incrementa contador
•  Temporizadores
–  Evento de clock incrementa contador
•  Tipos
–  Geral: continuous-, up- e down-mode,
–  Input Capture: useful to capture timer data
–  Output Compare: used to generate specific time intervals or
PWM output signals.
–  Watchdog: temporização longa (de guarda).
–  RTC: medir tempo em horas, minutos, segundos, etc.
EEE026 – PSE – UFMG 2020 21
Contador/Temporizador básico

EEE026 – PSE – UFMG 2020 22


Temporizadores
•  Counter size = N bits
•  Exemplo 1:
•  Input clock:
–  T ( período) =
1
(segundos) –  f = 10 MHz;
f (Hz) –  T = 10 ns;
•  Range
–  Maximum time interval. Equals to –  Counter size: N = 16 bits;
2N input intervals. –  Range = 216 * 10 ns
•  Resolution
–  = 65,535x103*10x10-9 s
–  Minimum input time interval, or
the input clock period. –  = 653,53x10-6 s
•  Time interval: Tint = k * T –  = 635,53 micro-segundos
–  Where: 0 < k < 2N, T = clock •  Posso gerar intervalos de
period or timer resolution.
até 635 µs.
(2 N − R)
Tint =
f •  Qual a resolução?
EEE026 – PSE – UFMG 2020 23
Temporizadores

•  Exemplo 2: •  Implementacoes:

–  Contador simples de16


•  Como gerar um intervalo bits (overflow):
de 200 µs ? •  Carregar contador com
–  f =10 MHz; T=10 ns; N=16; (2N-20.000) = 45.536
–  Tint = k * T ou k = Tint/T •  Conta de 45.536 a 65.535
–  k = 200us/10ns –  Contador com comparador
–  k = 20.000 pulsos (output compare):
•  Carregar comparador com
20.000-1
•  Conta de 0 a 19.999

EEE026 – PSE – UFMG 2020 24


EEE026 – PSE – UFMG 2020 25
EEE026 – PSE – UFMG 2020 26
Prescaler e Expansão da contagem

EEE026 – PSE – UFMG 2020 27


Modos de Operação

•  Output Compare
–  Conta de 0 a valor do comparador

•  Input Capture
–  Captura valor do contador em resposta a um evento externo

EEE026 – PSE – UFMG 2020 28


Contador/Temporizador Output Compare

EEE026 – PSE – UFMG 2020 29


Atmega 328 – Input Capture

EEE026 – PSE – UFMG 2020 30


MSP430 – Timer_A

capture

compare

EEE026 – PSE – UFMG 2020 31


Exemplo 3: Contador de RPM
•  Voce tem 2 C/T de 16 bits, um prescaler com divisões de 2, 4 ou 8, e recebe
um clock ajustável entre 500 kHz e 8 MHz.

•  Medir a rotação do eixo de um motor que varia entre 100 rpm e 1000 rpm.
Um sensor está ligado ao eixo e produz 60 pulsos por ciclo.

EEE026 – PSE – UFMG 2020 32


EEE026 – PSE – UFMG 2020 33
EEE026 - Projetos de Sistemas Embutidos
Periféricos
Diógenes C. da Silva Jr.
DEE/UFMG
diogenes@ufmg.br

Parte 3

EEE026 – PSE – UFMG 2020 34


Exemplo 3: Contador de RPM
•  Voce tem 2 C/T de 16 bits, um prescaler com divisões de 2, 4 ou 8, e recebe
um clock estável entre 500 kHz e 8 MHz.

•  Medir a rotação do eixo de um motor que varia entre 100 rpm e 1000 rpm.
Um sensor está ligado ao eixo e produz 60 pulsos por ciclo.

EEE026 – PSE – UFMG 2020 35


Encoders

Incremental Absoluto

pulsos código

EEE026 – PSE – UFMG 2020 36


Encoders – Incremental

•  Incremental

EEE026 – PSE – UFMG 2020 37


Encoders – Quadratura

•  Quadratura

EEE026 – PSE – UFMG 2020 38


Exemplo 3: Contador de RPM
•  Voce tem 2 C/T de 16 bits, um prescaler com divisões de 2, 4 ou 8, e recebe
um clock estável entre 500 kHz e 8 MHz.

•  Medir a rotação do eixo de um motor que varia entre 100 rpm e 1000 rpm.
Um sensor está ligado ao eixo e produz 60 pulsos por ciclo.

–  Cada rotação do motor produz entre 100 e 1000 rpm:


•  60 pulsos/rot * 100 rpm = 6.000 ppm / 60 seg/min = 100 pulsos/s
•  60 pulsos/rot * 1000 rpm = 60.000 ppm / 60 seg/min = 1000 pulsos/s
–  Basta contar os pulsos do sensor em cada segundo!
•  Um C/T como temporizador gerando o período de 1 segundo
•  Um C/T como contador de pulsos do sensor para cada segundo (16 bits)
–  Geração de períodos de 1 segundo usando um timer básico c/ overflow:
•  1 seg./216 = 15,259 µs ou 65,536 kHz (usando o sinal overflow) 2 * 65,536 kHz = 131,072 kHz
4 * 65,536 kHz = 262,144 kHz
•  Usando o prescaler de 8 ⇒ 8 * 65,536kHz = 524,288 kHz 8 * 65,536 kHz = 524,288 kHz

EEE026 – PSE – UFMG 2020 39


MSP430 Timer_A

EEE026 – PSE – UFMG 2020 40


Timer_A – Capture/Compare SFR

•  CMx: Capture mode (no, rising, falling, both edges)


•  CCISx: C/C input selection (CCIxA, CCIxB, GND, VCC)
•  SCS: Sync. Capture source (Async, Sync)
•  SCCI: Sync. C/C input
•  CAP: Capture mode (compare, capture)
•  OUTMODx: Output mode
•  CCIE: C/C interrupt enable
•  CCI: C/C input
•  OUT: Output
•  COV: Capture overflow
•  CCIFG: C/C interrupt flag
EEE026 – PSE – UFMG 2020 41
TACTL SFR

•  TASSEL: clock source (TACLK, ACLK,


SMCLK, INCLK)
•  IDx: input divider (1, 2, 4, 8)
•  MCx: mode control (stop, up, cont., up/down)
•  TACLR: Timer_A clear
•  TAIE: Timer_A interrupt enable
•  TAIFG: Timer_A interrupt flag

EEE026 – PSE – UFMG 2020 42


Up Mode

•  Conta de 0 a (TACCR0+1) vezes


•  Sinaliza os flags:
–  TAIFG: TACCR0 –> 0000h
(overflow)
–  CCIFG: (TACCR0+1) ->
(TACCR0)

EEE026 – PSE – UFMG 2020 43


Continuous Mode

•  Conta de 0 –> 0FFFFh -> 0


•  Sinaliza o flag:
–  TAIFG: 0FFFh –> 0000h

EEE026 – PSE – UFMG 2020 44


Up/Down Mode
•  Usa o subsistema compare_0
•  Período = 2x TACCR0
•  Sinaliza os flags:
–  TAIFG: 0001h –> 0000h
–  CCIFG: overflow

EEE026 – PSE – UFMG 2020 45


Interrupção SFR

EEE026 – PSE – UFMG 2020 46


Watchdog

EEE026 – PSE – UFMG 2020 47


Watchdog – Configuração

EEE026 – PSE – UFMG 2020 48


RTC

•  Calendar mode
•  Counter mode
•  Offset calibration
•  Temperature compensation
•  Frequency adjustments

EEE026 – PSE – UFMG 2020 49


MSP430 RTC_A, _B e _C

EEE026 – PSE – UFMG 2020 50


Multiplicador 32 bits (MPY32)

The MPY32 supports:


–  Unsigned multiply
–  Signed multiply
–  Unsigned multiply accumulate
–  Signed multiply accumulate
–  8-bit, 16-bit, 24-bit, and 32-bit
operands
–  Saturation
–  Fractional numbers
–  8-bit and 16-bit operation compatible
with 16-bit hardware multiplier
–  8-bit and 24-bit multiplications
without requiring a "sign extend"
instruction

EEE026 – PSE – UFMG 2020 51


PWM

EEE026 – PSE – UFMG 2020 52


EEE026 – PSE – UFMG 2020 53
EEE026 – PSE – UFMG 2020 54
MSP430 Timer_B

EEE026 – PSE – UFMG 2020 55


MSP430 Timer_1

EEE026 – PSE – UFMG 2020 56


Interface Serial

•  UART/USART

•  I2C

•  SPI

EEE026 – PSE – UFMG 2020 57


EEE026 – PSE – UFMG 2020 58
EEE026 - Projetos de Sistemas Embutidos
Periféricos
Diógenes C. da Silva Jr.
DEE/UFMG
diogenes@ufmg.br

Parte 4

EEE026 – PSE – UFMG 2020 59


DMA

•  Acesso ao barramento de dados do sistema:


–  Entre CPU, memória e periféricos
•  Sem uso da CPU
•  Co-processador dedicado
•  Modos de operação:
–  Rajada (Burst): transação única para o bloco.
–  Individual (Cycle stealing): transação para cada palavra.
–  Transparente: usa intervalos sem acesso pela CPU.

EEE026 – PSE – UFMG 2020 60


Co-processador e barramento

EEE026 – PSE – UFMG 2020 61


Handshaking

EEE026 – PSE – UFMG 2020 62


Transferência convencional

EEE026 – PSE – UFMG 2020 63


Co-processador DMA e CPU

EEE026 – PSE – UFMG 2020 64


EEE026 – PSE – UFMG 2020 65
Transferência com DMA – Burst

EEE026 – PSE – UFMG 2020 66


Transferência com DMA – Individual

EEE026 – PSE – UFMG 2020 67


MSP430 - DMA

EEE026 – PSE – UFMG 2020 68


MSP430 - DMA

EEE026 – PSE – UFMG 2020 69


MSP430 DMA SFRs

EEE026 – PSE – UFMG 2020 70


EEE026 – PSE – UFMG 2020 71
EEE026 - Projetos de Sistemas Embutidos
Periféricos
Diógenes C. da Silva Jr.
DEE/UFMG
diogenes@ufmg.br

Parte 5

EEE026 – PSE – UFMG 2020 72


Conversão Analógica de Sinais

•  Sinais externos contínuos


•  Processamento via programas -> digital
•  Cadeia de processamento de sinal misto.

EEE026 – PSE – UFMG 2020 73


Conversão e metrologia

EEE026 – PSE – UFMG 2020 74


Condicionamento de Sinais

•  Adequação de um sinal analógico:


–  Amplificação
–  Atenuação
–  Filtragem
–  Excitação
–  Linearização
–  Isolamento elétrico
–  Proteção contra surtos

EEE026 – PSE – UFMG 2020 75


Configuration Circuit Formula

Inverting amplifier

Non inverting amplifier

Buffer

Inverting adder

Differential amplifier(w/offset)

Inverting integrator

Current to voltage converter

EEE026 – PSE – UFMG 2020 76


Condicionamento de sensores

EEE026 – PSE – UFMG 2020 77


Amplificador de Instrumentação

EEE026 – PSE – UFMG 2020 78


EEE026 – PSE – UFMG 2020 79
Amostragem e Discretização

EEE026 – PSE – UFMG 2020 80


Amostragem e Nyquist

EEE026 – PSE – UFMG 2020 81


Amostragem e Aliasing

EEE026 – PSE – UFMG 2020 82


Quantização

EEE026 – PSE – UFMG 2020 83


EEE026 – PSE – UFMG 2020 84
Cadeia de Sinais

•  Sample and Hold

EEE026 – PSE – UFMG 2020 85


Conversores A/D

•  R-2R

EEE026 – PSE – UFMG 2020 86


Conversores A/D

•  Distribuição de Cargas

EEE026 – PSE – UFMG 2020 87


•  Aproximações Sucessivas

EEE026 – PSE – UFMG 2020 88

Você também pode gostar