Escolar Documentos
Profissional Documentos
Cultura Documentos
Lista de Exercícios - 1
4) O que é um mnemônico?
Em geral, um mnemônico (do mnemon grego ou “consciente, o que não esquece”) é um
auxílio à memória humana, como uma abreviatura, uma imagem mental, que ajuda a
lembrar de algo. A técnica de desenvolvimento desses dispositivos de memória é chamada
de "mnemônicos". Mnemônicos podem ser usados para lembrar números de telefone,
todos os nomes dos novos colegas da classe, etc. São usadas várias abordagens, e no
caso de µP, para lembrar qual tarefa uma instrução executa. Por exemplo, mover um dado
entre registradores (MOV) ou realizar uma adição (ADD), ou deslocar dado para a
memória (STR – de store) ou da memória (LDR – de load register).
(AULA 1 - SLIDES 65-66)
6) Num sistema von Neumann um operando pode ser a memória? E no ARM Cortex?
Sim, nas instruções CISC (sigla para Complex Instruction Set Computer - "Computador
com um Conjunto Complexo de Instruções", tipo computadores von Neumann) o
processadore é capaz de executar centenas de instruções complexas diferentes sendo,
assim, extremamente versátil. Um tipo de instrução é realizar operações tendo como
operando o dado de uma localidade na memória. No ARM isso não ocorre, ou seja, sendo
RISC ( Reduced Instruction Set Computer - "Computador com um Conjunto de Instruções
Reduzido") as instruções têm como operando apenas registradores, que estão internos à
CPU.
19) Descreva a cadeia de produção de software para um µProcessador moderno (em que
o fabricante já fornece bibliotecas em assembly, obj, e linguagem “C”).
a) Podemos encontrar em bibliotecas (libraries) vários drivers que o fabricante disponibiliza
que cuida das operações básicas de programação dos periféricos. Os arquivos de
biblioteca do fabricante podem já vir compilados no formato .obj.
b) Nos microprocessadores modernos escrevemos nosso código geralmente em
linguagem C, e depois compilamos gerando nosso código .obj.
c) Um programa linker faz a ligação entre todas as chamadas de função que estão nos
códigos .obj e então gera um arquivo executável.
Atualmente todo esse processo é feito dentro de uma IDE (Integrated Development
Environment) que já possui um editor de texto, um compilador, acesso às bibliotecas dos
fabricantes e o linker. As IDE's modernas possuem inclusive o sistema de gravação da
flash dos microcontroladores, além disso as IDE's possuem ainda interface de debug.
21) Por que o STM32 tem memória flash, memória RAM estática, e memória EEPROM?
A memória flash é a que retém programa, a memória RAM estática é uma memória de
dados genéricas e volátil (ou seja, vai perder o conteúdo após o desligamento do
microprocessador) e a EEPROM é uma memória de dados genéricos não volátil.
22) O que significa dizer que os periféricos do STM32 estão mapeados no espaço de
memória?
Significa dizer que só tem um mapa de endereços no ARM e que tanto a memória quanto
os periféricos estão alocados dentro desse espaço de memória.
25) Descreva como funciona o SYSTICK no STM32 e qual a diferença com um registrador
de tempo integral (registrador RTC) do chip.
O SYSTICK serve pra gerar uma base de tempo para a operação do microprocessador. Já
o RTC é um registrador usado para gerar base de tempo específico para o RTOS (real
time operating system).
26) O timer TIM1, e os timers TIM2, TIM3, e TIM4 estão em quais barramentos do STM32?
Por que razão você acha que eles estão em barramentos separados?
O TIM1 está no APB2, enquanto que os outros estão no APB1. Possivelmente porque as
funções primárias do ARM estão alocadas no barramento APB2 de alta velocidade. Os
outros periféricos estão no barramento APB1 de baixa velocidade.
27) Descreva como funciona um TIMER (e.g. TIM2) nos processadores ARM.
O clock principal do microprocessador (AHB barramento de alta perfomance, ex.: 72 MHz)
é divido por um prescaler (PSC=contador/divisão de frequência). A frequência resultante
dessa divisão é aplicada ao contador do timer (Timer Counter)(slide 23, aula 05). Um
registrador (ARR=auto reload register) é recarregado nesse time counter cada vez que o
contador atingir 0. A partir daí, a frequência de saída desse conjunto pode gerar:
a) pedido de interrupção para CPU = interrupção temporal;
b) PWM (Pulse Width Modulation) quando a frequência é comparada com o valor do CCR
(Compare & Capture Register);
c) outras funções ainda podem ser obtidas desse timer.
28) Na sua placa STM32F103C8 você deseja usar o timer 3 canal 3 para gerar PWM,
porém a linha de interrupção 0 já está usada. Qual seria a solução?
Veja no esquema de pinagem da placa, página 5 da apostila:
O T3C3 está ligado ao pino PB0. O pino PB0 só pode pedir interrupção pela linha/canal de
interrupção 0. Nesse caso existem duas soluções:
a) ou trocamos o canal do timer para T3C1, C2 ou C4;
b) liberamos o canal de interrupção 0, mudando o evento que solicita a interrupção por
esse canal.
29) Na sua placa STM32F103C8 você deseja usar o timer 3 canal 3 para gerar PWM,
porém você já configurou sua placa para ler sinal analógico pelo canal 8. Qual seria a
solução?
a) usar outro canal do timer 3;
b) usar outro timer, ex TIMER2, TIMER1 (EXCETO T1C2), etc...
c) reconfigurar para usar outro canal ANALÓGICO disponível...
30) Na sua placa STM32F103C8 você deseja usar o GPIO PB0 para gerar PWM, porém o
timer 3 canal 3 já está programado para gerar interrupção. Qual seria a solução?
a) reconfigurar a interrupção gerada por T3C3 para T1C2, ENTÃO uso o T3C3 como
PWM;
b) reconfiguro para usar outro canal PWM (qualquer dos timers e canais disponíveis);
31) Qual é a função principal dos pinos 34 e 37 (SWDIO e SWCLK) em sua placa
STM32F103C8?
A principal função é conectar com a interface JTAG (versão SINGLE WIRE - ou SW).
A interface SW serve para: a) gravar a flash com o programa a ser executado; b) serve
para depuração (DEBUGGING) do software enquanto é executado (on-line debugging).
32) Explique o que é watchdog timer e como você o usaria em um superloop que chama 2
funções.
É um subsistema que acusa quando o programa entra em LOOP infinito.
Um contador (WD counter) deve ser resetado (valor máximo) durante cada entrada/saída
de rotina. Esse contador é decrementado automaticamente (hardware). Se o contador
atingir ZERO é porque o programa está travado e NÃO está resetando o contador.
No caso de um superloop com duas funções, basta resetar o WD no início do superloop e
na entrada/(ou saída) de cada função chamada.
33) Você usaria o WDT (watchdog timer) dentro de uma ISR (interrupt service routine)?
Para que?
SIM... para acusar que o programa está travando dentro de uma ISR.
O melhor é testar as ISRs o suficiente para não precisar usar o WD... para tornar as ISRs
mais rápidas.
34) Se o custo de um cristal gerador de clock for alto para uma placa com STM32, você o
faria funcionar assim mesmo? Nessa hipotética placa, teria como ter um RTC?
SIM, o chip STM32F103 tem internamente dois osciladores (HSI-RC ou high-speed
internal clock de 8MHz, e LSI-RC ou low-speed internal clock de 40 KHz). Sim, o real-time
clock (RTC) poderia ser programado para funcionar a partir do LSI.
35) Por que colocamos um cristal de clock no ARM Cortex e quais os valores limites do
cristal para STM32?
Colocamos um cristal de clock para aumentar a precisão da frequência de clock do
sistema. Cristais tem muito pouca variação de frequência comparado a circuitos RC como
os do HSI. Os valores limites para cristais no ARM STM32F103 são: de 4 até 16 MHz no
HSE (high-speed external clock). O sinal LSE (low-speed external clock) aceita apenas
cristais 32.768 KHz.
36) Como conseguimos 72 MHz no sistema se temos apenas um cristal de 8MHz na placa
STM32F103C8?
Um circuito interno PLL (phase-locked loop) multiplica a frequência de entrada por um
valor programado nos registradores do circuito RCC (Reset and Clock Controller).
37) É possível operar sua STM32F103C8 com um clock de 56 MHz? Como fazer isso?
Sim, devemos ajustar os valores do prescaler (divisor da frequência de clock do cristal de
entrada) e ajustar o valor do multiplicador de frequência no PLL. A razão entre prescaler e
multiplicador vezes o clock de entrada deve dar 56.10^6 (56 MHz).
38) Descreva o conceito de clock-gating usado nos ARM, para que servem, e dê um
exemplo de como você já configurou um clock em uma das aulas práticas.
Em eletrônica embarcada "potência ou consumo de energia" é extremamente importante.
Para reduzir o consumo, os circuitos que não estão em uso tem seus clocks desativados.
Esse é o recurso de clock-gating que o ARM STM32 implementou em seus sistemas
microprocessados. Para utilizar qualquer das GPIOs, nas aulas práticas habilitamos o
clock tanto do barramento genérico onde a GPIO está ligada quanto da própria GPIO. São
exemplos de chamada de habilitação de clock:
// habilitar o clock no barramento das GPIOs B e C
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
39) O que é PWM e por que é mais eficiente que sinais analógicos em certas
aplicações (e.g. controle de velocidade de um motor)?
(vai cair na prova...) O PWM é o modulador por largura de pulso. Ele é mais eficiente
pois controla o tempo de ativação do transistor (no caso do exemplo), o que diminui
consideravelmente a potência dissipada nos componentes do circuito.
44) Quais os possíveis modos de operação para um dos pinos de saída de uma das portas
GPIO?
(slide 50 ... 57 aula 5)
45) Quais os possíveis modos de operação para um dos pinos de entrada de uma das
portas GPIO?
(slides 52...57 aula 5)
46) Como fazemos para programar um pino da GPIO para saída de PWM ou entrada de
RTX da UART?]
(consulte as práticas... tem na apostila...)
51) Por que declaramos a variável ticks dessa maneira? (volatile e fora da ISR
SysTick_Handler)
// define a var "ticks" (contador atualizado a cada 1ms)
volatile uint32_t ticks;
// rotina de tratamento da interrupcao (ISR) to timer SysTick
void SysTick_Handler(void)
{ ticks++;
}
Porque ela precisa ser uma variável GLOBAL para que outras funções a acessem (por
isso fora da ISR). Por outro lado, ela precisa ser VOLÁTIL porque antes de realizar
qualquer operação nesta variável devemos forçar a buscar o valor na memória - e não
usar um valor que pode estar representado dentro de um registrador no núcleo do ARM.
Volátil indica que o valor da memória pode ter sido modificado por uma rotina externa, por
isso devemos busca-lo sempre na memória.
5) Considerando que uma comunicação tem um dispositivo mestre e outro escravo, quais
podem ser os métodos de controle de protocolo? Explique cada método
Métodos de controle em protocolos
c)O DMAc solicita controle do barramento ativando DRQ (data request) da CPU... ao final
da instrução atual, a CPU pode liberar o controle do data bus, address bus, e os sinais de
controle. Para avisar ao DMAc a CPU ativa DACK (data acknowledge).
d)O DMAc então avisa o periférico que o serviço dele será atendido ativando DACKx (data
acknowledge)
e)A CPU então coloca todos os sinais dos barramentos em 3-state (nesse momento a
CPU pode executar instruções na cache interna)
f)O DMAc assume o controle do bus de endereços e os sinais de controle – os dados são
fornecidos pelo periférico!
h)Pode ser que (padrões antigos) o DMAc peça interrupção à CPU para que ela organize
(fique ciente) dados novos na memória.
i)A CPU atende um ISR do DMA (ou não) e retoma o controle do barramento; assim,
continua a execução do programa principal.
(Aula 6 - Slides 24-26)
8) Como o controlador de DMA resolve uma situação em que 3 periféricos pedem acesso
direto durante o mesmo clock?
As situações de pedidos de ISR simultâneos requerem ARBITRAGEM que podem ser por
prioridade ou por (Dayse Chain) serial linear
(Aula 6 - Slides 32)
Por Prioridade rotativa (round-robin): nessa estratégia o árbitro muda a prioridade dos
periféricos baseado no histórico de serviços prestados ao periférico. O último que recebeu
atendimento terá menor prioridade temporariamente, para que outros entrem na ponta da
fila. Por outro lado, os que estão na ponta da fila (alta prioridade) serão deslocados para o
final assim que forem atendidos, fazendo um rodízio de prioridades.
(Aula 6 - Slides 35)
13) Por que o round-robin pode ser melhor que o método prioridade fixa? Existe aplicação
para o método de prioridade fixa?
Porque ele gerencia as prioridades conforme o programa vai rodando, enquanto o de
prioridade fixa tem valores pré-programados. Uma aplicação do método de prioridade fixa
pode ser quando há poucos periféricos e suas prioridades são facilmente estabelecidas.
15) Nossas placas STM32F103 deverão se comunicar entre si. Elas usam um par de fios
(TX e RX). Que tipo de terminação será usada? (single-ended ou differential)? Precisamos
interligar os terras das duas placas durante a comunicação?
Single-ended (porque precisamos interligar o terra entre elas para servir de referência...
Sim, precisamos interligar os GNDs caso contrário o ruído nos fios ou a diferença de
tensão entre os terras das placas podem fazer os níveis lógicos serem irreconhecíveis.
Portanto, precisamos ter em ambas o mesmo “zero volt”.
16) Quando enviamos dados seriais, quais as técnicas para sincronizarmos transmissão e
recepção de dados?
A sincronização pode ser feita por (a) um fio de clock separado (que geralmente o mestre
controla) e (b) pela modulação da frequência de clock junto com os dados transmitidos
(line-coding).
17) Line coding é uma forma de sincronizar emissor e receptor enviando pelo canal o
dado e um tipo de codificação na qual o receptor pode extrair o clock do próprio canal. Cite
3 métodos de line-coding que você se lembra e explique como funcionam.
Slide 14/15 aula 07
Non-return to zero NRZ (em que o sinal não retorna para o valor zero, está sempre entre
+A e –A); Return to zero RTZ (em que o sinal sempre retorna para o valor zero após ter
ficado ½ bit em +A ou –A); e Bipolar AMI (em que o sinal o sinal retorna ao zero mas usa
uma forma complexa que só muda de estado dependendo do último bit enviado).
(não precisa explicar cada um como eu fiz, apenas citar)
19) Os sinais RTS (request to send) e CTS (clear to send) são usados para qual
finalidade?
Para instanciar uma camada de HANDSHAKE por hardware.
RTS: request to send - indica que a USART está pronta para receber dados (quando está
em nível low).
CTS: clear to send - habilita o recebimentos de dados (low) indicando que está pronta.
Também serve para bloquear a transmissão de dados ao final da transferência atual,
quando os dados ainda não foram retirados da USART (quando ativo em high).
Estes sinais são utilizados para que se faça handshake por hardware.
(AULA 7 - Slide 23)
20) Meu grupo escolheu usar RX2 e TX2 na STM32F102, mas outro grupo escolheu RX3
e TX3. Isso pode funcionar? Por que?
Sim, porque RX e TX são apenas os pinos de comunicação, ou seja, onde há a entrada e
saída de dados da sua placa. A configuração dos pinos é feita pelo programa desenvolvido
e independe dos pinos da outra placa pela qual ocorre se deseja comunicar.
24) Quantos dispositivos no máximo poderiam ser ligados numa rede I2C?
O I2C apesar de utilizar apenas 2 fios de comunicação, no protocolo desenvolvido pela
Philips, o mestre envia SERIALMENTE o endereço do dispositivo logo após o start-bit
(7bits de endereço = 127 dispositivos). Posteriormente, o padrão I2C ampliou para
endereços para 10-bit, permitindo até 1023 dispositivos conectados nos mesmos dois fios
físicos.
25) Por que podemos ligar todos os dispositivos I2C em apenas dois fios? Eles não entram
em curto-circuito? O que acontece se esquecermos de ligar os resistores Rp?
Os dois fios que compõem a linha I2C requerem que os dispositivos conectados a ela
tenham TODOS saídas “open-drain”. Dessa forma, todos as saídas possuem transistores
SEM POLARIZAÇÃO push-pull (apesar de haver um curto-circuito entre todas as saídas,
não significa que os sinais serão ligados ao VCC ou GND por saídas push-pull). O resistor
externo é necessário para polarizar os transistores conectados às linhas. Se esquecermos
de ligar os resistores (a linha) os dois fios ficarão flutuando, e poderão ter níveis lógicos
irreconhecíveis – a rede não funcionará.
26) O mestre baixou a linha SDA na interface I2C e pulsou o sinal de clock 8 vezes. O que
todos os escravos da linha devem fazer durante esse instante e no instante seguinte?
Todos os escravos devem atentar para o endereço mandado pelo mestre. No instante seguinte
(próximo clock) o receptor deve enviar acknowledge.
(AULA 7 - SLIDE 37)
28) O que ocorre se dois dispositivos estiverem assumindo o controle da I2C ao mesmo
tempo?
Ocorrerá conflito, assim havendo a necessidade de se arbitrar a rede. Sendo assim antes
de iniciar a comunicação o dispositivo verifica as linhas (ambas high), assim que detecta
que enviou um valor ‘1’ e a linha não foi para ‘1’ é porque está havendo conflito, então o
mesmo abandona a tentativa de comunicação e tenta mais tarde.
(AULA 7 – SLIDE 39)
29) Como um escravo sabe se deve enviar dados ou ler o dado que o mestre enviou pela
I2C?
Através do bit de comando RD/~WR que foi enviado (também serialmente) depois do
endereço.
(AULA 7 - SLIDE 37)
30) Cite 3 vantagens da I2C sobre a SPI e 3 vantagens da SPI sobre a I2C.
(AULA 7- SLIDE 43)
31) USB usa sinal diferencial. Por que então a interface tem um terminal +V e um GND?
Para prover energia para o periférico em cascata.
(AULA 7 – SLIDE 46)
32) USB usa uma arquitetura HOST e vários HUBs podem ser conectados criando uma
cadeia grande de periféricos. O que significa arquitetura HOST? Quem é o mestre e quem
é escravo na rede?
Host significa que um computador será o mestre de toda a rede. Qualquer HUB que entrar
na rede deve ser reconhecido pelo computador, que procurará um DRIVER para o
periférico (ou seja, uma rotina para prover um protocolo de comunicação com o periférico).
Por exemplo, se você conecta um mouse em um computador, o Windows, ou o Linux deve
reconhecer o periférico e buscar em sua biblioteca um driver para comunicar corretamente
com ele.
O mestre de uma rede USB será sempre o HOST, ou seja, o computador que hospeda ou
aceita a rede USB.
33) A rede CAN usa dois fios apenas CAN+ e CAN-, que eletricamente se comportam
como?
Na rede CAN a mensagem é transmitida a todos os nós da rede pelos dois fios CAN+ e
CAN- ou CAN-HIGH e CAN-LOW, o primeiro tem a tensão entre 2,5 e 3,5v enquanto o
segundo entre 1,5 e 2,5V. Os dois fios transmitem a mesma mensagem; porém um
contrário ao outro: enquanto o Can-High está em nível baixo, o CAN-low estará em Nível
alto e vice-versa. Este recurso dá à rede segurança pois é um modo de verificação de erro
no envio/recebimento de dados.
slide55 - aula7
34) O que é um “frame” em comunicação serial? (como os usados na rede CAN e USB)
Um frame é um pacote de dados que representa uma mensagem. O frame é composto da
informação que se quer enviar e outros itens que vão diferenciar de acordo com o
protocolo usado. Alguns exemplos da rede CAN são: um indicador de início do frame,
prioridade da informação, o número de bits que compõem os dados, bits para identificação
de erros, entre outros. slide57 - aula7
36) Cada conversor ADC no ARM STM32F103 é do tipo “aproximação sucessiva”. O que é
isso, e qual o tempo (em termos de clks) que o ARM usa para converter um sinal
analógico?
Trata-se de um conversor que tenta encontrar o valor aproximando valores a partir do bit
mais significativo e testando cada um dos bits inseridos.
O conversor aproximação sucessiva tem um conversor D/A embutido. A conversão
começa pelo MSB e um comparador testa para ver se o valor gerado é superior ao valor
de entrada, se for, MSB é desligado e o segundo MSB é então testado. Se o valor gerado
for menor que o valor de entrada então liga-se o segundo MSB e realiza o teste
novamente, assim sucessivamente até o LSB que será ligado e depois desligado. Em cada
clock podemos mudar o valor de um dos bits e testar o valor gerado.
Por isso, serão necessários o número de bits + 1 clocks. Ou seja, para um conversor de 12
bits, gastaremos 13 clocks.
37) O que significa ter 10 canais conversores ADC no ARM STM32F103 se temos apenas
2 circuitos conversores incorporados no chip?
Significa que o sistema microcontrolador tem 10 entradas de sinais analógicos que são
selecionadas por multiplexes (chaves analógicas) como entradas dos 2 conversores ADC
do sistema. (aula 8 slides 17...21)
39) O STM32F103 tem 7 canais para DMA1 e 5 canais para DMA2. Quantos periféricos
podem solicitar acesso direto à memória no ARM STM32F103?
Procurar no livro ou no manual seção DMA...
40) Marque nos periféricos abaixo, quais não podem pedir DMA em nenhum canal no ARM
STM32F103:
a) (__) Unidade Lógica e Aritmética,
c) (__) I2C
d) (__) SPI
e) (__) Pipeline