ต้องการความช่วยเหลือในการทำความเข้าใจแผนที่หน่วยความจำ PIC


9

พื้นหลังบางส่วน ฉันใช้ MPLABx กับ PicKit2 เพื่อตั้งโปรแกรมรูปภาพประเภทต่างๆ ในขณะนี้มันคือ 16F887 ฉันพยายามที่จะยึดติดกับห่วงโซ่เครื่องมือ Hi-Tech PICC Lite แต่ฉันไม่พอใจมากขึ้นกับการประกอบบางสิ่ง การดำเนินการที่น่าจะเร็วอย่างรวดเร็ว (พิจารณาวงจรการเรียนการสอน 500ns ที่ 8Mhz) กำลังดำเนินการจนเสร็จสิ้น 20us ดังนั้นฉันจึงเริ่มใส่รหัส ASM ของฉันเองเพื่อจัดการกับมัน

อย่างไรก็ตามฉันมีปัญหาในการทำความเข้าใจแผนที่หน่วยความจำที่ให้ไว้ในแผ่นข้อมูลในหน้า 20

หน่วยความจำโปรแกรมเริ่มต้นที่ 0005h อย่างไรก็ตามหน้า 23 แสดงที่อยู่ไฟล์ของการลงทะเบียนเพื่อวัตถุประสงค์พิเศษเช่นพอร์ต A ที่อยู่ของพอร์ต A แสดงเป็น "05h"

ฉันสับสนว่าจะแยกแยะความแตกต่างระหว่างตำแหน่งหน่วยความจำ 0005h อย่างไรและการลงทะเบียนวัตถุประสงค์พิเศษอยู่ที่ 05h ฉันจะอ้างอิงการลงทะเบียนวัตถุประสงค์พิเศษได้อย่างไร

ฉันได้ทำการเขียนโปรแกรมแอสเซมเบลอร์ที่ครอบคลุมสำหรับชิป HC11 รุ่นเก่า แต่นี่เป็นการลงทุนครั้งแรกของฉันในการเข้ารหัส PIC asm ความช่วยเหลือใด ๆ ที่นี่จะได้รับการชื่นชม

คำตอบ:


8

PIC ใช้สิ่งที่เรียกว่า "สถาปัตยกรรมฮาร์วาร์ด" ซึ่งหมายความว่ามันมีช่องว่างที่อยู่แยกต่างหากสำหรับคำแนะนำและข้อมูล

ไม่ว่าที่อยู่อ้างอิงถึงการลงทะเบียนหรือคำสั่งขึ้นอยู่กับบริบทที่มันถูกใช้

ไดอะแกรมในหัวข้อ 2.1 "หน่วยความจำโปรแกรม" เป็นเรื่องเกี่ยวกับหน่วยความจำของโปรแกรมหรือพื้นที่ที่อยู่ของคำสั่ง แผนภาพในหัวข้อ 2.2 "หน่วยความจำข้อมูล" เป็นเรื่องเกี่ยวกับการลงทะเบียนและการลงทะเบียนฟังก์ชั่นพิเศษหรือพื้นที่ที่อยู่หน่วยความจำข้อมูล


ดังนั้นถ้าฉันพูดว่า "MOVWF 0x0005" PIC จะรู้ว่าฉันกำลังอ้างอิงที่อยู่ 0x0005 ในหน่วยความจำข้อมูลไม่ใช่พื้นที่โปรแกรมหรือไม่
Michael

@Michael: ใช่ ไม่ว่าที่อยู่ในการเรียนการสอนหมายถึงโปรแกรมหรือหน่วยความจำข้อมูลขึ้นอยู่กับการเรียนการสอน นี่คือคำอธิบายสำหรับแต่ละ opcode โดยทั่วไปถ้ามันเกี่ยวข้องกับข้อมูลเช่น MOVWF มันจะเข้าถึงหน่วยความจำข้อมูล หากมันเกี่ยวข้องกับที่อยู่ของโปรแกรมเช่น GOTO มันจะเข้าถึงหน่วยความจำของโปรแกรม
Olin Lathrop

ขอบคุณ. ฉันเดาว่า HC11 ที่ฉันเคยทำแอสเซมเบลอร์คือฟอนนอยมันน์ ฉันมักจะมีปัญหาในการเขียนรหัสการเรียนรู้เมื่อฉันเพิ่งเรียนรู้ ขอขอบคุณอีกครั้ง.
Michael

3

สิ่งที่ Dave พูด แต่ฉันต้องการชี้ให้เห็นว่าหน่วยความจำของโปรแกรมเริ่มต้นที่ 0 ไม่ใช่ 5 ในการรีเซ็ตตัวประมวลผลจะตั้งค่าพีซีเป็น 0 และเริ่มทำงาน บนตัวขัดจังหวะตัวประมวลผลทำให้เกิดการโทรไปยังตำแหน่ง 4 อย่างมีประสิทธิภาพและปิดบิตการเปิดใช้งานอินเตอร์รัปต์แบบบิต โปรแกรมหน่วยความจำตำแหน่ง 5 ไม่พิเศษนอกจากนี้จะเป็นคำสั่งที่สองของรูทีนการขัดจังหวะถ้าคุณมีรูทีนการขัดจังหวะ


ใช่ว่าเป็นที่เข้าใจกัน ฉันหมายถึง 5 คือที่อยู่คำสั่งทั่วไปคำแรก
Michael

@Michael: ไม่มันไม่ใช่อย่างนั้น อย่างที่ฉันได้กล่าวไปแล้วว่าไม่มีอะไรพิเศษเกี่ยวกับตำแหน่งหน่วยความจำของโปรแกรม 5. ฉลากที่อยู่คำสั่งทั่วไปอันดับแรกไม่สมเหตุสมผล ที่อยู่คำสั่งแรกคือ 0 และ 4 เป็นพิเศษเล็กน้อยเช่นกันเนื่องจากขัดจังหวะ ส่วนที่เหลือไม่ได้พิเศษจริงๆและ "ทั่วไป" ไม่สมเหตุสมผลในบริบทนี้
Olin Lathrop

ตกลงแล้วที่อยู่เวกเตอร์ที่ไม่ถูกรีเซ็ตแรกและไม่ขัดจังหวะเป็นอย่างไร สิ่งที่ฉันพูดคือฉันเข้าใจว่าคุณพยายามจะพูดอะไร
Michael
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.