ความยาวและระยะสั้นคือ DMA ช่วยให้ซีพียูสามารถทำงานที่ความเร็วดั้งเดิมได้อย่างมีประสิทธิภาพในขณะที่อุปกรณ์ต่อพ่วงสามารถทำงานที่ความเร็วดั้งเดิมได้อย่างมีประสิทธิภาพ ตัวเลขส่วนใหญ่ในตัวอย่างประกอบขึ้น
ลองเปรียบเทียบสองตัวเลือกเพื่อรวบรวมข้อมูลจาก ADC เป็นระยะ:
- คุณสามารถตั้งค่า ADC เป็นส่วนหนึ่งของการขัดจังหวะ (เป็นระยะหรืออย่างอื่น)
- คุณสามารถสร้างบัฟเฟอร์และบอก DMA ให้ถ่ายโอนการอ่าน ADC ไปยังบัฟเฟอร์
ลองโอนตัวอย่าง 1,000 ตัวอย่างจาก ADC ไปยัง RAM
ใช้ตัวเลือกที่ 1: สำหรับทุกตัวอย่างมี
- 12 รอบจะใช้เวลาเข้าขัดจังหวะ
- อ่าน adc
- ร้านค้าใน ram
- ใช้รอบ 12 รอบเพื่อออกจากอินเตอร์รัปต์
สมมติว่าฟังก์ชั่นอินเตอร์รัปต์นี้มี 76 คำสั่งรูทีนทั้งหมดมีความยาว 100 คำสั่งสมมติว่ามีการประมวลผลรอบเดียว (กรณีที่ดีที่สุด) นั่นหมายถึงตัวเลือกที่ 1 จะใช้เวลาในการประมวลผลเวลา CPU 100,000 รอบ
ตัวเลือกที่ 2: DMA ได้รับการกำหนดค่าให้รวบรวมตัวอย่าง 1000 ของ ADC สมมติว่า ADC มีทริกเกอร์ฮาร์ดแวร์จากตัวจับเวลา
- ADC และ DMA ถ่ายโอนข้อมูลตัวอย่าง 1000 รายการไปยังหน่วยความจำ
- DMA ขัดจังหวะ CPU ของคุณหลังจาก 1000 ตัวอย่าง
- 12 รอบจะใช้เวลาเข้าขัดจังหวะ
- รหัสเกิดขึ้น (สมมุติว่ามันบอก DMA ให้เขียนทับ RAM)
- ใช้รอบ 12 รอบเพื่อออกจากอินเตอร์รัปต์
การทำอินเตอร์รัปต์ทั้งหมด (ด้วยการเข้าและออกจากค่าใช้จ่าย) คือ 100 คำสั่งรอบเดียว เมื่อใช้ DMA คุณจะใช้เวลาเพียง 100 รอบในการบันทึกตัวอย่าง 1,000 ตัวอย่าง
ตอนนี้ทุกครั้งที่ DMA เข้าถึงบัสใช่อาจมีข้อขัดแย้งระหว่าง CPU และ DMA CPU อาจถูกบังคับให้รอ DMA ให้เสร็จ แต่การรอให้ DMA เสร็จสิ้นนั้นสั้นกว่าการล็อค CPU ในการให้บริการ ADC หากนาฬิกาแกน CPU เป็นนาฬิกาบัส 2x แสดงว่าซีพียูอาจสูญเสียรอบคอร์สองสามรอบเพื่อรอ DMA ให้เสร็จ ซึ่งหมายความว่าเวลาดำเนินการถ่ายโอนที่มีประสิทธิภาพของคุณอยู่ระหว่าง 1,000 (สมมติว่า CPU ไม่เคยรอ) และ 9000 รอบ ยังคงเป็นวิธีที่ดีกว่า 100,000 รอบ