จุด DMA ใน CPU ฝังตัวคืออะไร


17

ฉันเพิ่งทำโปรเจ็กต์กับ mbed (LPC1768) เมื่อเร็ว ๆ นี้โดยใช้ DAC เพื่อส่งสัญญาณคลื่นต่าง ๆ ฉันอ่านบางส่วนของแผ่นข้อมูลและพูดคุยกันว่า DMA มีอุปกรณ์ต่อพ่วงมากมายได้อย่างไร ดูเหมือนว่ามันจะมีประโยชน์ แต่จากการอ่านเพิ่มเติมฉันพบว่า DMA ใช้ดาต้าบัสเดียวกันกับซีพียู (ซึ่งฉันเดาว่าเป็นเรื่องปกติ) นี่หมายความว่า CPU ไม่สามารถโต้ตอบกับความทรงจำใด ๆ ในขณะที่ DAC กำลังรับข้อมูลหรือไม่ นอกจากนี้เนื่องจาก DAC ไม่มีบัฟเฟอร์ (เท่าที่ฉันสามารถบอกได้) และดังนั้นจึงต้อง DMA บ่อยมากประเด็นของ DMA คืออะไร หาก CPU ไม่สามารถทำธุรกรรมหน่วยความจำได้จะทำอะไรได้หรือไม่


8
ฉันขอแนะนำให้คุณดูที่คุณสมบัติของซีพียูของคุณและหากมันสามารถทำสิ่งอื่นนอกเหนือจากการเข้าถึงหน่วยความจำ ผมเคยได้ยินของซีพียูบางอย่างที่สามารถทำสิ่งต่างๆเช่นการตัดสินใจหรือการคำนวณไม่แน่ใจว่านี้เป็นเรื่องธรรมดาที่ทุกคน ..
PlasmaHH

CPU ควรใช้เวลาในการถ่ายโอนข้อมูลไปยังพอร์ต I / O หรือมอบหมายงานให้กับอุปกรณ์เฉพาะหรือไม่
StainlessSteelRat

ใช่ CPU สามารถทำสิ่งอื่น ๆ ได้ แต่ในระบบฝังตัวอาจใช้เวลานานในการเชื่อมต่อกับอุปกรณ์ต่อพ่วงโดยเฉพาะพอร์ต I / O มันจะไม่เหมาะสมกว่าหรือที่จะมี data บัสพิเศษสำหรับ DMA? หรือว่าปกติแล้วไม่จำเป็น สถานการณ์ที่คุณต้องการรถบัสพิเศษคือเมื่อคุณพยายามที่จะผลักดันขีด จำกัด ของฮาร์ดแวร์ของคุณซึ่งฉันคิดว่าเป็นเมื่อคุณต้องการ usa DMA หรือไม่
BeB00

1
ตัวอย่างง่ายๆสมมติว่าคุณต้องการพิมพ์ข้อมูลจำนวนมากไปยังพอร์ตอนุกรม คุณสามารถนั่งรอแต่ละไบต์ที่จะส่ง (ช้า) คัดลอกไปยังบัฟเฟอร์แล้วใช้อินเตอร์รัปต์บน CPU เพื่อส่งแต่ละไบต์เมื่อพอร์ตพร้อม (พร้อมสลับบริบทจำนวนมาก = ช้า) หรือคัดลอกไปที่ บัฟเฟอร์และปล่อยให้ตัวควบคุม DMA หมดเวลาข้อมูลขณะที่ CPU ไม่ว่างทำสิ่งอื่น (อาจเร็วกว่า)
Tom Carpenter

2
เห็นหน้าปกของ EDN ครั้งหนึ่งที่แสดงภาพวาดของชายคนหนึ่งสวมใส่รองเท้าขนาดใหญ่สามฟุตยาวและพาดหัว "ถ้าเป็นรองเท้าก็สวมใส่มัน" ประเด็นคือถ้าส่วนหนึ่งทำสิบสิ่งที่คุณไม่ต้องการและสิ่งหนึ่งที่คุณต้องการและราคารอยเท้าและงบประมาณด้านพลังงานพอดีคุณควรใช้มันและไม่ต้องเสียเวลามองหาอะไร ด้วยคุณสมบัติที่น้อยลง
โซโลมอนสโลว์

คำตอบ:


17

แผ่นข้อมูล LPC1768ผมพบว่ามีคำพูดต่อไปนี้ (เหมืองเน้น):

ตัวควบคุม DMA วัตถุประสงค์ทั่วไปแปดช่องทาง (GPDMA) บนเมทริกซ์มัลติเลเยอร์ AHB ที่สามารถใช้กับ SSP, I2S บัสบัส, UART, อุปกรณ์ต่อพ่วงตัวแปลงสัญญาณอนาล็อกเป็นดิจิตอลและดิจิตอลเป็นอะนาล็อกสัญญาณจับคู่จับเวลาและสำหรับหน่วยความจำถึง - โอนหน่วยความจำ

APB แบบแยกส่วนช่วยให้สามารถรับส่งข้อมูลได้อย่างรวดเร็วโดยมีแผงลอยน้อยระหว่าง CPU และ DMA

บล็อกไดอะแกรมในหน้า 6 แสดง SRAM ที่มีหลายช่องทางระหว่างเมทริกซ์ AHB และเครื่องหมายคำพูดต่อไปนี้สำรองข้อมูลนี้:

LPC17xx มีหน่วยความจำแรมบนชิปแบบ 64 kB ทั้งหมด ซึ่งรวมถึง SRAM ขนาด 32 kB หลักซึ่งสามารถเข้าถึงได้โดย CPU และตัวควบคุม DMA บนบัสความเร็วสูงและอีก 16 kB แต่ละบล็อก SRAM แต่ละบล็อกตั้งอยู่บนพอร์ตสลาฟที่แยกจากกันในมัลติเลเยอร์ AHB สถาปัตยกรรมนี้ช่วยให้การเข้าถึง CPU และ DMA สามารถแพร่กระจายผ่านแรมสามแยกที่สามารถเข้าถึงได้พร้อมกัน

และนี่คือการเสริมด้วยคำพูดต่อไปนี้:

GPDMA ช่วยให้การทำธุรกรรมอุปกรณ์ต่อพ่วงกับหน่วยความจำอุปกรณ์ต่อพ่วงหน่วยความจำอุปกรณ์ต่อพ่วงอุปกรณ์ต่อพ่วงและหน่วยความจำต่อหน่วยความจำ

ดังนั้นคุณสามารถสตรีมข้อมูลไปยัง DAC ของคุณจากหนึ่งในบล็อก SRAM ที่แยกต่างหากหรือจากอุปกรณ์ต่อพ่วงที่แตกต่างกันในขณะที่ใช้ SRAM หลักสำหรับฟังก์ชั่นอื่น ๆ

อุปกรณ์ต่อพ่วงประเภทนี้เป็นเรื่องธรรมดาในส่วนที่เล็กกว่าซึ่งส่วนต่อประสานหน่วยความจำค่อนข้างง่าย (เทียบกับโปรเซสเซอร์ Intel ที่ทันสมัย)


อ่าขอบคุณฉันไม่ทราบว่ามันเป็นไปได้ฉันยังใหม่ต่อ DMA นั่นหมายความว่า cpu สามารถเข้าถึงอุปกรณ์ต่อพ่วงในขณะที่ DAC กำลังเข้าถึง SRAM แยกกันหรือไม่?
BeB00

1
ใช่ - นี่คือสิ่งที่เมทริกซ์ AHB ใช้ ช่วยให้ตัวควบคุมที่แตกต่างกัน (CPU, DMA, อุปกรณ์ต่อพ่วงบางอย่างเช่นอีเธอร์เน็ตและ USB) สามารถเข้าถึงสิ่งต่าง ๆ ได้ในเวลาเดียวกัน นี่คือสาเหตุที่ SRAM มีหลายพอร์ต
David

ใช่ AHB ใน critters ขนาดเล็กราคาถูกเหล่านี้ให้แบนด์วิดธ์หน่วยความจำบ้าเนื่องจากธนาคารหน่วยความจำแบบขนาน: คุณสามารถมีอีเธอร์เน็ต, USB2 และทุกอย่างทำงานที่ throughput สูงสุดและ cpu ไม่ได้สังเกต ...
peufeu

รหัสหัวแม่มือสามารถใส่ 2 คำแนะนำในหนึ่งคำ 32- บิตดังนั้นซีพียูอาจไม่จำเป็นต้องเข้าถึงรถบัสที่มักจะทำคณิตศาสตร์หรือการดำเนินงานที่เกี่ยวข้องกับการลงทะเบียนส่วนใหญ่ ... ในอีกด้านฉันคิดว่า M3 และ M4 สามารถ ทำการเข้าถึงหน่วยความจำหลายต่อนาฬิกา (คำแนะนำและข้อมูล) เนื่องจากมีบัสหลาย
peufeu

30

ความยาวและระยะสั้นคือ DMA ช่วยให้ซีพียูสามารถทำงานที่ความเร็วดั้งเดิมได้อย่างมีประสิทธิภาพในขณะที่อุปกรณ์ต่อพ่วงสามารถทำงานที่ความเร็วดั้งเดิมได้อย่างมีประสิทธิภาพ ตัวเลขส่วนใหญ่ในตัวอย่างประกอบขึ้น

ลองเปรียบเทียบสองตัวเลือกเพื่อรวบรวมข้อมูลจาก ADC เป็นระยะ:

  1. คุณสามารถตั้งค่า ADC เป็นส่วนหนึ่งของการขัดจังหวะ (เป็นระยะหรืออย่างอื่น)
  2. คุณสามารถสร้างบัฟเฟอร์และบอก 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 รอบ


2
สิ่งสำคัญที่ควรทราบคือ RAM ไม่ใช่ที่เดียวที่ CPU สามารถจัดเก็บข้อมูลได้ โดยทั่วไป CPU จะโหลดข้อมูลจาก RAM ลงทะเบียนก่อนที่จะทำงาน
Aron

ย่ะถูกต้องแน่นอน ตัวอย่างของฉันเป็นเพียงภาพร่างคร่าวๆ
pgvoorhees

ไมโครคอนโทรลเลอร์หลายตัวยังมีบัสหลายชั้นเพื่อให้สามารถใช้งานพร้อมกันได้ เช่น adc-> ram และ flash-> ลงทะเบียนพร้อมกัน นอกจากนี้คำแนะนำจำนวนมากยังมีความยาวมากกว่า 1 นาฬิกาจึงมีเวลาเหลือเฟือสำหรับ DMA
Jeroen3

9

หากในรอบที่กำหนดโปรเซสเซอร์และคอนโทรลเลอร์ DMA จะต้องเข้าถึงบัสเดียวกันหนึ่งหรืออื่น ๆ จะต้องรอ อย่างไรก็ตามระบบจำนวนมากมีหน่วยความจำหลายส่วนพร้อมบัสแยกต่างหากพร้อมกับบัส "บริดจ์" ที่จะอนุญาตให้ CPU เข้าถึงหน่วยความจำหนึ่งขณะที่คอนโทรลเลอร์ DMA เข้าถึงอีกระบบหนึ่ง

นอกจากนี้ซีพียูจำนวนมากอาจไม่จำเป็นต้องเข้าถึงอุปกรณ์หน่วยความจำในทุกรอบ ถ้าโดยปกติแล้วซีพียูจะต้องเข้าถึงหน่วยความจำเพียงสองในสามรอบอุปกรณ์ DMA ที่มีลำดับความสำคัญต่ำอาจสามารถใช้ประโยชน์จากรอบเมื่อหน่วยความจำบัสนั้นว่าง

แม้ในกรณีที่รอบ DMA ทุกครั้งจะทำให้ CPU หยุดทำงานชั่วคราว แต่ DMA อาจยังมีประโยชน์มากหากข้อมูลมาถึงในอัตราที่ช้าพอที่ CPU จะสามารถทำสิ่งต่าง ๆ ระหว่างรายการข้อมูลขาเข้าได้ แต่เร็วพอที่จะต้องลดค่าใช้จ่ายต่อรายการ ถ้าพอร์ต SPI กำลังป้อนข้อมูลไปยังอุปกรณ์ในอัตราหนึ่งไบต์ทุก ๆ 16 ซีพียูรอบเช่นการขัดจังหวะซีพียูสำหรับการถ่ายโอนแต่ละครั้งน่าจะทำให้ใช้เวลาเกือบทั้งหมดในการเข้าและกลับจากรูทีนบริการขัดจังหวะและไม่มี ทำงานจริง ๆ อย่างไรก็ตามการใช้ DMA ค่าโสหุ้ยสามารถลดลงได้ถึง 13% แม้ว่าการถ่ายโอน DMA แต่ละครั้งจะทำให้ซีพียูหยุดทำงานนานสองรอบ

ในที่สุดซีพียูบางตัวก็อนุญาตให้ใช้ DMA ในขณะที่ซีพียูนอนหลับอยู่ การใช้การถ่ายโอนข้อมูลแบบขัดจังหวะจะต้องให้ระบบปลุกอย่างสมบูรณ์สำหรับการถ่ายโอนข้อมูลแต่ละหน่วย อย่างไรก็ตามการใช้ DMA อาจเป็นไปได้ที่ตัวควบคุมสลีปจะป้อนตัวควบคุมหน่วยความจำสองสามนาฬิกาทุกครั้งที่มีไบต์เข้ามา แต่ให้ทุกอย่างอยู่ในโหมดสลีปซึ่งจะช่วยลดการใช้พลังงาน


1
ส่วน Cortex-M เช่น LPC1768 มีเส้นทางหน่วยความจำที่แตกต่างจากแฟลชไปยังตัวถอดรหัสคำสั่งดังนั้นในความเป็นจริงการดำเนินการลงทะเบียนเพื่อลงทะเบียนอาจหมายถึง CPU สามารถดำเนินการหลายคำสั่งในช่วงเวลาที่ต้องการเข้าถึงหน่วยความจำข้อมูล
Chris Stratton

5

ในฐานะโปรแกรมเมอร์ DMA เป็นตัวเลือกสำหรับการถ่ายโอนข้อมูลไปยังและจากอุปกรณ์ต่อพ่วงที่รองรับ สำหรับตัวอย่างคลาสสิกของการขยับบัฟเฟอร์ขนาดใหญ่ผ่านอุปกรณ์ต่อพ่วงแบบอนุกรมเช่น SPI หรือ UART หรือรวบรวมตัวอย่างจำนวนมากจาก ADC คุณมีสามวิธีในการย้ายข้อมูลดังกล่าว:

  1. วิธีการสำรวจ นี่คือที่ที่คุณรอธงการลงทะเบียนเพื่อให้คุณสามารถเลื่อนเข้า / ออกไบต์ต่อไป ปัญหาคือว่าคุณกำลังประมวลผล CPU ทั้งหมดในขณะที่รอสิ่งนี้ หรือถ้าคุณต้องแชร์เวลา CPU ในระบบปฏิบัติการการถ่ายโอนของคุณจะช้าลงอย่างมาก

  2. วิธีการขัดจังหวะ นี่คือที่ที่คุณเขียนรูทีนการบริการขัดจังหวะ (ISR) ที่ดำเนินการกับทุกการถ่ายโอนไบต์และคุณเขียนรหัสใน ISR ที่จัดการการถ่ายโอน นี่เป็น CPU ที่มีประสิทธิภาพมากกว่าเนื่องจาก CPU จะให้บริการ ISR ของคุณเมื่อจำเป็นเท่านั้น มันฟรีสำหรับการใช้งานตลอดเวลายกเว้นใน ISR ISR ยังเป็นหนึ่งในตัวเลือกที่เร็วกว่าสำหรับการถ่ายโอนในแง่ของความเร็วในการถ่ายโอน

  3. DMA คุณกำหนดค่า DMA ด้วยตัวชี้แหล่งที่มา / ปลายทางจำนวนการถ่ายโอนและการปิดลงไป มันจะขโมยรอบบัสและเวลา CPU เพื่อให้การถ่ายโอนสำเร็จและ CPU มีอิสระที่จะทำสิ่งอื่น ๆ ในเวลาเฉลี่ย คุณสามารถกำหนดค่าสถานะหรืออินเตอร์รัปต์เพื่อระบุว่าเมื่อการถ่ายโอนเสร็จสิ้น โดยทั่วไปแล้วจะเป็นการสัมผัสที่เร็วกว่า ISR และเป็นตัวเลือกในการถ่ายโอนที่เร็วที่สุดของคุณ

ในฐานะโปรแกรมเมอร์ฉันชอบ DMA เพราะเป็นรหัสที่ง่ายที่สุดและเป็นเทคนิคที่เร็วที่สุดในการถ่ายโอน โดยทั่วไปคุณเพียงแค่ต้องกำหนดค่าการลงทะเบียนคู่สำหรับพอยน์เตอร์ต้นทาง / ปลายทางและจำนวนการถ่ายโอนเพื่อสร้างและปิด ฉันใช้เวลาทำงานกับรหัส ISR นานกว่าที่ฉันทำในรหัสเร่งด้วย DMA เนื่องจากรหัส ISR ต้องใช้ทักษะการออกแบบที่สำคัญและจะต้องมีรหัสการทดสอบการตรวจสอบและอื่น ๆ รหัส DMA นั้นเล็กกว่าและฉันต้องเขียนรหัสด้วยตัวเอง ค่อนข้างไม่สำคัญและฉันได้รับความเร็วในการถ่ายโอนสูงสุดในการต่อรองราคา

จากประสบการณ์ของฉันเมื่อเร็ว ๆ นี้ด้วยโปรเซสเซอร์ Atmel SAM3 / 4 DMA จะทำงานเร็วกว่าระบบ ISR ที่มีประสิทธิภาพในการประดิษฐ์ของฉันเอง ฉันมีแอปพลิเคชันที่จะอ่านเป็นจำนวนไบต์จาก SPI ทุก ๆ 5 มิลลิวินาที คณิตศาสตร์จุดลอยตัวจำนวนมากเกิดขึ้นในงานพื้นหลังดังนั้นฉันจึงต้องการให้ CPU ทำงานได้อย่างอิสระเท่าที่จะเป็นไปได้ การนำไปใช้ครั้งแรกคือ ISR และจากนั้นฉันย้ายไปที่ DMA เพื่อเปรียบเทียบและลองซื้อเวลา CPU มากขึ้นเล็กน้อยระหว่างกลุ่มตัวอย่าง ความเร็วในการถ่ายโอนเพิ่มขึ้นเล็กน้อย แต่เพิ่มขึ้นเล็กน้อย มันวัดแทบไม่ได้ในขอบเขตโอ

นั่นเป็นเพราะในไมโครโปรเซสเซอร์เมื่อเร็ว ๆ นี้ที่ฉันได้เห็น ISR และ DMA ทำงานในแบบเดียวกันเกือบ - พวกเขาใช้ซีพียูรอบตามความต้องการและ DMA กำลังทำสิ่งเดียวกันกับซีพียูเพราะฉันจะใช้รหัสใน ISR ที่มีประสิทธิภาพ .

ในบางกรณีฉันได้เห็นอุปกรณ์ต่อพ่วงที่มีพื้นที่ RAM ของตัวเองซึ่ง DMA เข้าถึงได้เท่านั้น นี่คือบน Ethernet MAC หรือ USB


3

DMA มักใช้ที่นี่เพื่อให้ DAC สามารถมีเวลาปกติสร้างรูปคลื่นโดยการเปลี่ยนเอาต์พุตอะนาล็อกในช่วงเวลาที่ทราบ

ใช่ถ้าเป็นรถโดยสารสาธารณะ ... คุณต้องแชร์

ซีพียูไม่ได้ใช้งานบัสอยู่เสมอดังนั้นบางครั้งจึงเป็นความคิดที่ดีที่จะแบ่งปันกับเครื่องยนต์ dma และแน่นอนว่าหมายถึงการจัดลำดับความสำคัญมีส่วนร่วมบางครั้งก็เป็นเพียงผู้ที่มาถึงก่อน (ตัวอย่างเช่นมีคำสั่ง Fifo ต่อหน้าทรัพยากรและคำขอ Fifo up ตามลำดับที่พวกเขามาถึงใช่ว่าไม่จำเป็นต้องกำหนดขึ้นอย่างแน่นอน ) ในกรณีเช่นนี้คุณอาจต้องการให้ dma มีลำดับความสำคัญสูงกว่าซีพียูเพื่อให้เวลาที่มีความละเอียดอ่อนเช่น DACs หรือ ADCs มีกำหนดเวลาที่แน่นอน ขึ้นอยู่กับว่าพวกเขาเลือกที่จะใช้มันอย่างไร

บางครั้งผู้คนมีข้อสันนิษฐานที่ไม่ถูกต้องบ่อยครั้งที่ dma นั้นฟรี มันไม่ได้ใช้เวลาบัสถ้าแชร์กับ cpu (ซึ่งท้ายที่สุดก็คือมันพูดคุยกับทรัพยากรที่ cpu สามารถพูดคุยได้) ดังนั้น cpu และ / หรือ dma ถูกปิดดังนั้น cpu ยังคงต้องรอสักครู่ เวลาในการใช้งานบางอย่าง (น่าจะไม่ใช่ไมโครคอนโทรลเลอร์ของคุณ) cpu จะถูกปิดไว้อย่างสมบูรณ์จนกว่า dma จะเสร็จสมบูรณ์ cpu จะหยุดทำงานในช่วงเวลานั้น ขึ้นอยู่กับการนำไปใช้ ส่วนที่ฟรีคือ cpu ไม่จำเป็นต้องถูกขัดจังหวะตลอดเวลาหรือหยั่งเสียงหรือกลั้นลมหายใจสำหรับเหตุการณ์บางอย่างในการป้อนข้อมูล อาจใช้เวลาในการสร้างบัฟเฟอร์ถัดไปเพื่อ dma มากกว่า มันต้องดูการถ่ายโอน dma ให้เสร็จสมบูรณ์และจัดการกับมัน แต่แทนที่จะบอกว่าทุก ๆ ไบต์ตอนนี้มันมีหลายไบต์บล็อกข้อมูลบางส่วน

ไม่มีคำตอบสากล "ขึ้นอยู่กับ" ... กับการออกแบบเฉพาะของสิ่งที่คุณกำลังใช้ แม้ในการออกแบบชิป / บอร์ด / ระบบเดียวอาจมีเอนจิ้น dma หลายตัวและไม่มีเหตุผลที่จะถือว่าพวกเขาทั้งหมดทำงานในลักษณะเดียวกัน สำหรับทุกอินสแตนซ์คุณต้องเข้าใจและน่าเสียดายที่พวกเขามักจะไม่จัดทำเอกสารหรือจัดทำเอกสารให้ดีพอ ดังนั้นคุณอาจต้องสร้างการทดลองบางอย่างหากเป็นข้อกังวล


บันทึกย่อที่ฝังตัวไม่ได้เกี่ยวข้องกับมัน จุดของ dma คือการเพิ่มประสิทธิภาพโดยอาจทำงานให้กับ cpu ดังนั้นจึงไม่จำเป็นต้องมีรหัสและใช้ประโยชน์จากวงจรบัสที่ไม่ได้ใช้งานตามปกติและทำงานที่นั่น นอกจากนี้สำหรับสิ่งต่าง ๆ ตามที่คุณต้องการในการป้อนข้อมูลในเวลาที่เหมาะสมโดยไม่ต้องมีซีพียู ข้อดีเหล่านี้มีประโยชน์หรือไม่
old_timer

1

คำตอบที่ได้พูดคุยเกี่ยวกับ“ ความเร็ว” ของ CPU สามารถทำงานได้และประโยชน์ที่ DMA จะได้รับ อย่างไรก็ตามมีการพิจารณาอีกอำนาจ

หาก CPU ต้องการส่งแพ็กเก็ตข้อมูลบนลิงก์ช้ามันจะต้องตื่นขึ้นมาเป็นส่วนใหญ่หากใช้การสำรวจหรือขัดจังหวะ แต่ CPU หลักอาจอยู่ในสถานะสลีปขณะที่ DMA กำลังทำอยู่ .


0

โปรเซสเซอร์บางตัวเช่นซีรีย์ STM32H7 มีตัวเลือก RAM จำนวนมากและมี RAM ควบคู่กันจำนวนมาก การมีหน่วยความจำ RAM แยกต่างหากช่วยให้ DMA สามารถตอกย้ำ RAM จำนวนมากในขณะที่ตัวประมวลผลกำลังประมวลผลข้อมูลในหน่วยความจำแบบคู่ที่ไม่ต้องใช้แคชและไม่ต้องใช้ DMA ในการย้ายข้อมูลไปรอบ ๆ คุณสามารถใช้ MDMA ฉันสร้างชุดเรดาร์ FMCW โดยใช้หนึ่งในนั้น ADC รับข้อมูล IQ จากสองอินพุตเป็น SRAM เดียว จากนั้นฉันปรับขนาดข้อมูลและดำเนินการจุดลอยตัว 256 bin fft ที่ซับซ้อนใน dtcm ram จากนั้น FIFO ผลลัพธ์จะเป็นอาร์เรย์ 2d ใน AXI ram โดยใช้ MDMA

ผมเอา 64 fft ตัวที่สองข้ามฟีดสำหรับเวกเตอร์ความเร็ว จากนั้นฉันก็ทำการเพิ่มขนาดของข้อมูลที่ซับซ้อนและส่งค่าผลลัพธ์ทศนิยม 128 & 64 จุดไปยัง H7 อื่นโดยใช้ SPI ที่ 12.5 MHz สำหรับการตรวจจับ ฉันทำทั้งหมดนี้ใน 4 มิลลิวินาที

อัตราการสุ่มตัวอย่างเป็นของ ADC คือ 84 kHz และใช้ oversampling ฉันได้รับความละเอียดประมาณ 18 บิต

ไม่เลวสำหรับตัวประมวลผลวัตถุประสงค์ทั่วไปเท่านั้นที่ทำงานในช่วง MHz และไม่มี RAM ภายนอก

แคชขนาดใหญ่ยังมีการปรับปรุงประสิทธิภาพการทำงานสำหรับ calcs นอก dtcm ช่วยด้วยเช่นกัน

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