PIC 메모리 맵을 이해하는 데 도움이 필요합니다


9

일부 배경. 다른 유형의 사진을 프로그래밍하기 위해 PicKit2와 함께 MPLABx를 사용합니다. 현재는 16F887입니다. Hi-Tech PICC Lite 툴 체인을 고수하려고하지만 일부 구성 요소에 대해 점점 더 불만을 느끼고 있습니다. 비교적 빠른 속도 (8Mhz에서 500ns 명령주기를 고려)가 완료되는 작업은 완료하는 데 최대 20us가 소요됩니다. 그래서 나는 그것을 처리하기 위해 내 자신의 ASM 코드를 삽입하기 시작했습니다.

그러나 데이터 시트 에 제공된 메모리 맵을 이해하는 데 어려움이 있습니다.

프로그램 메모리는 0005h에 시작합니다. 그러나 23 페이지는 포트 A와 같은 특수 목적 레지스터의 파일 주소를 보여줍니다. 포트 A의 주소는 "05h"로 표시됩니다.

메모리 위치 0005h와 05h에있는 특수 목적 레지스터를 구별하는 방법이 혼란 스럽습니다. 특수 목적 레지스터를 어떻게 참조합니까?

구형 HC11 칩에 대해 상당히 광범위한 어셈블러 프로그래밍을 수행했지만 PIC asm 코딩에 대한 첫 번째 모험입니다. 여기에 도움이 될 것입니다.

답변:


8

PIC는 소위 "하버드 아키텍처"를 사용합니다. 즉, 명령과 데이터를위한 별도의 주소 공간이 있습니다.

주소가 레지스터 또는 명령어를 참조하는지 여부는 사용되는 컨텍스트에 따라 다릅니다.

섹션 2.1 "프로그램 메모리 구성"의 다이어그램은 프로그램 메모리 또는 명령어 주소 공간에 대한 것입니다. 2.2 "데이터 메모리 구성"섹션의 다이어그램은 레지스터 및 특수 기능 레지스터 또는 데이터 메모리 주소 공간에 대한 것입니다.


따라서 "MOVWF 0x0005"라고 말하면 PIC는 프로그램 공간이 아니라 데이터 메모리에서 주소 0x0005를 참조하고 있음을 알고 있습니까?
Michael

@ 마이클 : 예. 명령어의 주소가 프로그램 또는 데이터 메모리를 가리키는 지 여부는 명령어에 따라 다릅니다. 이것은 각 opcode에 대해 설명됩니다. 기본적으로 MOVWF와 같은 데이터를 처리하면 데이터 메모리에 액세스합니다. GOTO와 같은 프로그램 주소를 다루면 프로그램 메모리에 액세스합니다.
Olin Lathrop

감사합니다. 나는 어셈블러를 사용했던 HC11이 폰 노이만 아치라고 생각합니다. 방금 배우고있을 때 지시 코드를 지나치게 작성하는 문제가 종종있었습니다. 다시 감사합니다.
Michael

3

Dave가 말한 내용이지만 프로그램 메모리가 5가 아니라 0에서 시작한다는 점을 지적하고 싶습니다. 리셋시 프로세서는 PC를 0으로 설정하고 실행을 시작합니다. 인터럽트에서 프로세서는 효과적으로 위치 4를 호출하고 글로벌 인터럽트 활성화 비트를 끕니다. 프로그램 메모리 위치 5는 특별하지 않습니다. 단, 인터럽트 루틴이있는 경우 인터럽트 루틴의 두 번째 명령이됩니다.


그렇습니다. 나는 5가 첫 번째 일반적인 명령어 주소라는 것을 의미했다.
Michael

@ 마이클 : 아니, 그것도 아니에요. 내가 말했듯이, 프로그램 메모리 위치 5에는 특별한 것이 없습니다. 레이블의 첫 번째 일반 명령어 주소 는 의미가 없습니다. 첫 번째 명령어 주소는 0이며 4는 인터럽트로 인해 약간 특별합니다. 나머지는 실제로 특별하지 않으며이 문맥에서 "일반"은 의미가 없습니다.
Olin Lathrop

좋아, 재설정되지 않은 첫 번째 비 인터럽트 벡터 주소는 어떻습니까? 내가 말하는 것은 당신의 말이 무엇인지 이해한다는 것입니다.
Michael
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.