segunda-feira, 28 de julho de 2008

Setando Direction Bits no Port 0 do R8C/25

Pois bem pessoal, estou eu aqui mais uma vez dividindo minhas horas de labuta em cima do R8C/25 com vocês. Hoje com uma dica importantíssima que economizará algumas horas em testes e consulta no manual do hardware.
Ao fazer o setup dos Direction Bits do Port 0 é necessário antes desproteger o mesmo. Mas porquê isso ocorre?
Existe um registro na SFR que chama-se Protect Register. Ele serve para proteger registros importantes para não ser facilmente sobrescritos quando o programa pode estar fora de controle. Os registros protegidos são:

• PRC0 bit: CM0, CM1, OCD, FRA0, FRA1 and FRA2 registers
• PRC1 bit: PM0 and PM1 registers
• PRC2 bit: PD0 register (olha o nosso vilão aqui!)
• PRC3 bit: VCA2, VW0C, VW1C and VW2C registers

E agora um esquema desta entrada na SFR:

Mas vamos ver um exemplo disto funcionando...

Primeiro um exemplo do que vamos fazer... e como me deparei com o problema.
A tarefa é simples e aparentemente trivial, e o é... simplesmente quero setar um SFR bit a bit e não o byte todo... olhem o exemplo fazendo isso no port 1...

Em seguida o exemplo original como o HEW monta no ambiente, alterando o prc2 para 1 e em seguida alterando o byte todo...


Executando o código acima, vamos abrir o View -> CPU -> IOs para acompanhar o que está sendo feito dos nossos registros (Valeu André por me lembrar desta ferramenta dentro do HEW!)


Notem que ao executar e chegar no break-point pd0 contém o valor 0x0F...

Agora vamos tentar fazer o mesmo só que bit a bit... notem que foi alterado somente o primeiro bit. Isso se deve ao fato que foi desprotegido o registro e após setarmos o primeiro bit, ele retornou ao estado protegino original. Portanto não executando conforme eu pretendia.


Pois bem, se a cada bit nós desligarmos o protect register do pd0, nós conseguiremos setar todos os bits conforme imaginamos.

Bom pessoal, é isso... notem que este aspecto somente ocorre com o pd0 e não com os outros registros deste SFR, conforme nota no quadro do SFR postado neste artigo...

PS: As informações deste post foram retiradas do Datasheet do R8C/24 e 25, página 96, Tópico 11.

Nenhum comentário:

Postar um comentário