Precisa de ajuda para entender o mapa de memória PIC

9

Algum plano de fundo. Eu uso o MPLABx com um PicKit2 para programar diferentes tipos de fotos. No momento é o 16F887. Eu tento seguir a cadeia de ferramentas Hi-Tech PICC Lite, mas estou ficando cada vez mais insatisfeito com a forma como algumas coisas são montadas. Operações que devem ser relativamente rápidas (considerando o ciclo de instruções de 500ns a 8Mhz) estão demorando até 20us para serem concluídas. Então, comecei a inserir meu próprio código ASM para lidar com isso.

No entanto, estou tendo dificuldades para entender o mapa de memória fornecido na folha de dados na página 20.

A memória do programa começa às 0005h. No entanto, a página 23 mostra endereços de arquivos de registradores de fins especiais, como a Porta A, por exemplo. O endereço da porta A é mostrado como "05h".

Estou confuso sobre como diferenciar entre um local de memória 0005h e o registro de finalidade especial localizado às 05h. Como faço para referenciar os registros de finalidade especial?

Eu fiz uma programação de montadores bastante extensa para chips HC11 mais antigos, mas esta é minha primeira aventura na codificação ASM PIC. Qualquer ajuda aqui seria apreciada.

Michael
fonte

Respostas:

8

O PIC usa o que é chamado de "Arquitetura de Harvard", o que significa que possui espaços de endereço separados para instruções e dados.

Se um endereço se refere a um registro ou uma instrução depende do contexto em que é usado.

Os diagramas na seção 2.1 "Organização da memória do programa" são sobre memória do programa ou espaço de endereço da instrução. Os diagramas na seção 2.2 "Organização da memória de dados" são sobre registros e registros de funções especiais ou espaço de endereço da memória de dados.

Dave Tweed
fonte
Portanto, se eu dissesse "MOVWF 0x0005", o PIC saberia que estou referenciando o endereço 0x0005 na memória de dados e não no espaço do programa?
Michael
@ Michael: Sim. Se o endereço em uma instrução se refere ao programa ou à memória de dados depende da instrução. Isso é descrito para cada opcode. Basicamente, se ele lida com dados, como o MOVWF, ele acessa a memória de dados. Se tratar de endereços de programas, como GOTO, ele acessará a memória do programa.
Olin Lathrop
Obrigado. Acho que o HC11 em que eu costumava montar era von Neumann arch. Eu costumava ter problemas em escrever meu código de instrução quando estava aprendendo. Mais uma vez obrigado.
18712 Michael
3

O que Dave disse, mas também quero salientar que a memória do programa começa em 0, não em 5. Em uma redefinição, o processador define o PC como 0 e começa a executar. Em uma interrupção, o processador efetivamente causa uma chamada para o local 4 e desativa o bit de ativação de interrupção global. O local da memória do programa 5 não é especial; caso contrário, será a segunda instrução da rotina de interrupção, se você tiver uma rotina de interrupção.

Olin Lathrop
fonte
Sim, isso é entendido. Eu quis dizer 5 é o primeiro endereço de instrução genérica.
Michael
@ Michael: Não, não é isso também. Como eu disse, não há nada realmente especial sobre a localização da memória do programa 5. O primeiro endereço de instrução genérico da etiqueta não faz sentido. O primeiro endereço de instrução é 0 e 4 também é um pouco especial devido a interrupções. O resto não é realmente especial e "genérico" não faz sentido nesse contexto.
Olin Lathrop
Ok, e o primeiro endereço de vetor sem redefinição e sem interrupção? O que estou dizendo é que entendo o que você está tentando dizer.
18712 Michael