-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathEpisode_24.html
152 lines (119 loc) · 10.7 KB
/
Episode_24.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="content-type">
<link rel="stylesheet" href="./style.css">
<script src="./functions.js"></script>
</head>
<body>
<div class="page" id="top">
<p class="title">
<span class="titlePrincipal">Episódio 24: Conhecendo o módulo USART - Recepção assíncrona e a interrupção associada</span></p>
<p class="backPage"><a href="./Summary.html">Voltar ao índice</a></p>
<p class="backPage"><a href="./Episode_23.html">Voltar ao Episódio 23</a></p>
<p class="forwardPage"><a href="./Episode_25.html">Ir para Episódio 25</a></p>
<hr class="indice"/>
<p class="principal">Neste episodio, que é um complemento do episodio 23 (anterior) que trata da transmissão no modulo USART, vamos aprender a receber dados pelo modulo USART.</p>
<p class="principal">Começaremos conhecendo o registrador RCSTA (Receive Status and Control Register) que fara o controle sobre o processo de recebimento de informações, visto na Figura 24.1</p>
<table class="image">
<thead>
<tr>
<th>
<span class="figureTitle">Figura 24.1 -</span> Registrador RCSTA
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<img src="./figures/RCSTA_register.png" style="width: 509.00px; height: 54.00px;" title="RCSTA register" alt="RCSTA register"/>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td class="citacaoFigura">
<span>Fonte:</span> <span>xxxxx</span>
</td>
</td>
</tfoot>
</table>
<p class="principal">Comecaremos pelo estudo do bit SPEN o qual é responsavel por ativar ou desativar a porta serial. Assim seo o bit SPEN for igual a 0 a porta serial está desativada, ou se SPEN for igual a 1, a porta serial está ativada.</p>
<p class="principal">O bit RX9 é o bit de permissão para receber um 9º bit, onde se RX9 for igual a 0, seleciona recepção de apenas 8 bits (1 byte), enquanto que, se RX9 for igual a 1, seleciona recepção de dados de 9 bits.</p>
<p class="principal">O proximo bit é o bit SREN que é responsavel por permitir o recebimento unico de dados. Ese bit não tem utilidade no modo assincrono (que usaremos nos episodios), como também no modo sincrono como <i>Slave</i>.</p>
<p class="principal">No modo sincrono como <i>Master</i>, se o bit SREN for igual a 0, desativa o recebimento unico de dados, eqnaunto se SREN for igual a 1, ativa o recebimento unico. Este bit é limpo após a recepção estar completa.</p>
<p class="principal">O bit CREN é o bit responsavel por ativar ou desativar a recepção continua de dados e ele trabalha nos dois modos. Assim, se o modo assincroo estiver ativo, tem-se que a recepção continua está desativada se CREN for igual a 0 ou será ativada se CREN for igual a 1. Porem, se o modo sincrono estiver ativo, a recepção continua de dados esta desativada se CREN for igual a 0, mas se CREN for igual a 1, ativa o recebimento (recepção) continuo de dados enquanto o bit CREN está limpado.</p>
<p class="principal">O proximo bit a ser configurado é o bit ADEN o qual é responsavel por ativar o auto detectar enderecos. Esse bit não é usado no modo sincrono e nem no modo assincrono com 8 bits (bit RX9 igual a 0).</p>
<p class="principal">Já no modo assincrono com 9 bits (RX9 = 1), se ADEN for igual a 0, desativa detecção de endereco, e assim todos os bits são recebidos, e o 9º bit pode ser usado como bit de paridade, mas se ADEN for igual a 1, ativa detecção de endereço, ativa interrupção e carrega do buffer de recepção quando RSR<8> (bit de parada) está setado.</p>
<p class="principal">O bit <span class="c39">FERR [verificar tradução correta] </span> é o bit de erro de enquadramento, no qual se esse bit for igual a 0 quer dizer que não houve erro de enquadramento, enquanto se <span class="c39">FERR[verificar tradução correta] </span> for igual a 1, não dize que houve erro de enquadramento (pode ser atualizado lendo o registrador RCREG e recever o proximo byte valido).</p>
<p class="principal">O bit <span class="c39">OERR [verificar tradução correta]</span> é o bit de erro de ultrapassagem, onde ele será igual a 0 se não houve ultrapassagem, enquato se <span class="c39">OERR [verificar tradução correta]</span> for igual a 1, houve erro de ultrapassagem e le pode ser limpado, limpando o bit CREN.</p>
<p class="principal">E por ultimo o bit RX9D que é o 9º bit de dados recebidos que pode ser um bit de paridade.</p>
<p class="principal">O processo de recepção é visto na Figura X2 e os dados são recebidos o pino RB1/RX.</p>
<table class="image">
<thead>
<tr>
<th>
<span class="figureTitle">Figura 24.2 -</span> Diagrama de blocos de recepção do modulo USART
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<img src="./figures/USART_reception_USART.png" style="width: 604.72px; height: 504.00px;" title="USART reception" alt="USART reception"/>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td class="citacaoFigura">
<span>Fonte:</span> <span>xxxxx</span>
</td>
</td>
</tfoot>
</table>
<p class="principal">Como já mencioado, trabalharemos no modo assincrono (bit SYNC do registrador TXSTA igual a 0) e quando esse modo é selecionado, fazemos uso da recepção continua (bit CREN do registrador RCSTA igual a 1).</p>
<p class="principal">Conforme o datasheet do microcontrolador PIC16F628A, o registrador RSR ( Receive (serial) Shift Register) é o coração do processo do recebimento dos dados.</p>
<p class="principal">Após o microcontrolador receber o bit de parada, o dado recebido no registrador RSR é transferido para o registrador RCREG (se ele estiver vazio). Se o processo de transferencia da informação ocorrer com sucesso, o bit RCIF (bit de interrupção do modulo USART relativo ao processo de recepção e que está contido no registrador PIR1) está setado e pode ser feito o tratamento se os bits PEIE (INTCON<2>) e RCIE (PIE1<6>) estiverem setados. O bit RCIF é apenas de leitura e para ser limpo deve-se ler o registrador RCREG e estar vazio porteiormente.</p>
<p class="principal">O registrador RCREG é um registrador duplo buferizado de 2 niveis de profundidade do tipo FIFO (First Input First Output - Primeiro ao entrar e Primeiro ao sair) no qual é possivel receber 2 bytes e o terceiro byte estara no registrador RSR.</p>
<p class="principal">Na detecção do bit de parada do terceiro byte, se o registrador RCREG estiver cheio, então o bit OERR (Overrun error - erro de ultrapassagem) será setado e a informação no registrador RSR será perdida.</p>
<p class="principal">Para recuperar 2 bytes do registrador RCREG, necessita paenas fazer a leitura da infirmação duas vezes pois RCREG é um registrador de comportamento FIFO com dois nvieis.</p>
<p class="principal">A limpeza do registrador OERR (Overrun error bit) é limpo via software como já foi comentado na descrição dele, isto é, o bit OERR será limpo ao limpar e setar o bit CREN.</p>
<p class="principal">Agora se o bit OERR está setado, o conteudo do registrador RSR será transferido para o registrador RCREG e são inibidos, então é essencial para limpar o bit de erro se está setado.</p>
<p class="principal">O bit de (Framming error) FERR está setado se um bit de parar é detectado como limpo.</p>
<p class="principal">O os bits FERR e o 9º bit recebido são buferizados na mesma forma como os dados recebidos.</p>
<p class="principal">Lendo o registrador RCREG, carregaremos os bits RX9D e FERR com novos valores, portanto é essencial para o usuario ler o registrador RCSTA antes do registrador RCREG na ordem para não perder as informações antigas dos bits FERR e RX9D.</p>
<p class="principal">Conforme o datasheet, os passos para repecção assincrona são:</p>
<ol class="list">
<li>
Configure TRISB1 (RB1/RX) e TRISB2 (RB2/TX) como pinos de entrada;</li>
<li>
Inicialize o registrador SPBRG <span class="c39">(registrador para …)</span> para o apropriado baud rate. Se baud rate de alta velocidade é desejado “sete” o bit BRGH conforme episódio 23;</li>
<li>
Ative a porta serial assincrona limpando o bit SYNC e setando o bit SPEN;</li>
<li>
Se as interrupções são desejadas, então “sete” o bit RCIE;</li>
<li>
Se o 9º bit é desejado, então “sete” o bit RX9;</li>
<li>
Ative a recepção, setando o bit CREN;</li>
<li>
O flag será setado quando a recepção está completa e a interrupção será gerada se o bit RCIE for setado;</li>
<li>
Ler o o conteudo do registrador RCSTA para receber o 9º digito (se habilitado) e também se qualquer erro ocorreu durante a recepção;</li>
<li>
Ler o registrador RCREG que contém o dado recebido de 8 bits;</li>
<li>
Se um erro OERR ocorrer, limpa o erro pela limpeza e habilitação do bit CREN.</li>
</ol>
<p class="principal">Exemplo 1: Recebimento de comandos vindo do computador para ligar LEDs</p>
<p style="color:red;background-color:black;font-size:24pt;">Colocar o exemplo aqui</p>
<p class="principal">Exemplo 2: Recebimento de dados de módulo GPS</p>
<p style="color:red;background-color:black;font-size:24pt;">Colocar o exemplo aqui</p>
<hr class="indice"/>
<p class="backPage"><a href="#top">Voltar ao topo da página</a></p>
<p class="backPage"><a href="./Episode_23.html">Voltar ao Episódio 23</a></p>
<p class="forwardPage"><a href="./Episode_25.html">Ir para Episódio 25</a></p>
<p class="backPage"><a href="./Summary.html">Voltar ao índice</a></p>
</div>
</body>
</html>