MF9BF506N DMAC

Started by tha, February 18, 2015, 08:36:17 AM

Previous topic - Next topic

tha

CHAPTER: DMAC
ในบทนี้อธิบายถึง DMAC.

1. Overview of DMAC(อธิบายโดยสรุปของ DMAC)
2. Configuration of DMAC(โครงร่างภายนอกของ DMAC)
3. Functions and Operations of DMAC(ฟังชั่นและการทำงานของ DMAC)
4. DMAC Control
5. Registers of DMAC
6. Usage Precautions(ข้อควรระวังในการใช้)

ไม่มีอะไรทำผมก็จะแปล manual ไปเรื่อยๆ ต่อไปเอา DMA ก็แล้วกัน เริ่มต้นกันไว้ก่อน ช่วงนี้เข้าฤดูร้อนแล้วคงไปได้ช้าเพราะจะอ่านหนังสือไม่ค่อยได้ไม่เหมือนหน้าหนาว

tha

1. Overview of DMAC
DMAC (Direct Memory Access Controller) เป็น function block ที่ส่งถ่ายข้อมูลที่ความเร็วสูงโดยไม่ใช้ CPU. การใช้ DMAC จะทำให้การทำงานของระบบดีขึ้น

- Overview of DMAC
     - DMAC จะมี bus ของมันซึ่งเป็นอิสระจาก CPU bus; ดังนั้นมันจะยอมให้มีการทำงานส่งถ่ายแม้แต่ตอนที่มีการเข้าถึง CPU bus
      - มันจะประกอบด้วยชาแนล 8 channels เปิดใช้งานเพื่อปฏิบัติงาน DMA transfers ที่แตกต่างกัน 8 ชนิด ซึ่งเป็นอิสระจากกัน
      - มันสามารถเซต address ของปลายทางที่ส่งถ่าย, address ของต้นทางที่ส่งถ่าย, ขนาดของข้อมูลที่ส่งถ่าย, แหล่งที่ร้องขอให้ส่งถ่ายและวิธีการส่งถ่าย, และควบคุม
        การสตาร์ทให้ทำการส่งถ่าย, การบังคับให้สิ้นสุดการส่งถ่ายและการพักการส่งถ่ายสำหรับแต่ละชาแนล
      - มันสามารถควบคุมการสตาร์ทของการส่งถ่ายแบบกลุ่ม,  การบังคับให้สิ้นสุดการส่งถ่ายแบบกลุ่มและการพักการส่งถ่ายแบบกลุ่มสำหรับทุกชาแนล 
      - เมื่อมีหลายชาแนลทำงานพร้อมกัน มันสามารถเลือกจากลำดับความสำคัญของชาแนลนั้นๆให้ทำงานจากวิธีคงที่ (fixed method) หรือวิธีหมุน (rotated method)
      - มันรองรับ hardware DMA transfer โดยใช้ interrupt signal จาก Peripherals
      - มันจะคล้อยตามกับ system bus (AHB), รองรับ 32-bit address space (4Gbytes). 

tha

- Overview of Functions of Each Channel
     - addresses ของ the transfer source และ transfer destination สามารถท่ีจะให้เพิ่มขึ้นหรือคงที่
     - ฟังชั่นโหลดค่าซ้ำ(Reload function) สำหรับ addresses ของ transfer source และ transfer destination (คือฟังชันที่คืนค่าเดิมที่เซตไว้เมื่อเสร็จการ
       transfer) มีให้ใช้งาน
     - ขนาดของ data ที่ถูกส่งถ่ายสามารถที่จะถูกเลือกได้จากสามรายการนี้ :
          Transfer data width : (Select from byte/half-word/word)
          Setting the number of blocks : (Select from 1 to 16)
          Setting the number of transfers : (Select from 1 to 65536)
         (สำหรับความรู้เกี่ยวกับความแตกต่างระหว่าง number of blocks และ number of transfers, ดูที่ "3 Functions and Operations of DMAC".)
     - การแจ้งให้ทราบหรือไม่แจ้งให้ทราบว่าสำเร็จการส่งถ่ายโดยสมบรูณ์และไม่สำเร็จการส่งถ่ายโดยสมบรูณ์ สามารถที่จะระบุได้
     - Transfer mode สามารถเลือกได้จากห้าชนิดนี้ :
          Software-Block transfer
          Software-Burst transfer
          Hardware-Demand transfer
          Hardware-Block transfer
          Hardware-Burst transfer

ช่วงนี้รื้อบ้านรื้อไฟที่บ้าน เลยไปได้ช้าหน่อย  :D


tha

- Transfer Modes
   Software transfer เป็นวิธีหนึ่งที่ใช้สตาร์ท DMAC โดยคำสั่งโดยตรงจาก CPU.

   Hardware transfer เป็นวิธีหนึ่งที่ใช้ interrupt signal จาก Peripheral เป็นสัญญานร้องขอ DMAC transfer(DMAC transfer request signal) ไปสตาร์ท
   DMAC โดยตรงเมื่อ Peripheral ออกการร้องขอให้ transfer

   Multifunction serial unit, USB unit และ ADC unit ออกคำสั่งโดยตรงต่อ DMAC เพื่อสตาร์ท data transfer, เมื่อ การส่ง/การรับ data หรือ A/D
   conversion data ต้องการที่จะถูก transfer. External interrupt unit และ Base timer unit ออกคำสั่งโดยตรงต่อ DMAC เพื่อสตาร์ท data transfer ที่ตาม
   เวลาการส่งถ่าย(transfer timing) ในทั้งสองกรณี, data สามารถถูก transfer โดยปราศจาก CPU โดยการทำการเซตค่าเช่นนี้ไว้ล่วงหน้า

- Abbreviations(คำย่อ)
   ในบทนี้จะมีคำย่อตามนี้ : DE, DS, DH, PR, EB, PB, ST, IS, BC, TC, MS, TW, FS, FD, RC, RS, RD, EI, CI, SS, EM. ทั้งหมดของคำย่อนี้จะอ้างอิงถึง
   แต่ละบิตของ DMAC control registers (DMACR, DMACSA, DMACDA, DMACA, DMACB). ดูที่ "5 Registers of DMAC".

tha

2.1. DMAC and System Configuration
ในส่วนนี้อธิบายถึง DMAC และ system configuration ของมัน



Explanation of Block Diagram
-DMAC
   DMAC จะอยู่ในองค์ประกอบมากสุด 8-channel  แต่ละชาแนลจะกระทำการส่งถ่ายที่เป็นอิสระ The priority controller จะควบคุม transfer operations ของชาแนลเหล่านี้, เมื่อมีการขัดแย้งในหมู่พวกมัน

-Connection to the system
   The diagram ของ the system configuration ในรูปทำให้ง่ายต่อจุดประสงค์ในการอธิบาย สำหรับรายละเอียดที่มากขึ้น, ดูที่บท " System Overview ". DMAC ต่ออยู่กับ CPU, Flash, RAM และ Peripherals โดยทาง the system bus. มันจะมี bus ของมันที่เป็นอิสระจาก the CPU bus, จะยอมให้มีการ transfer operation ขณะที่มีการเข้าถึง CPU bus มันจะเข้าถึงทุกๆ address area ในระบบโดยระบุ the address ของ transfer destination และ transfer source สำหรับแต่ละชาแนลเพื่อที่จะ transfer data ระหว่าง the memory และ Peripheral. อย่างไรก็ตามบางพื้นที่ก็ไม่สามารถถูกเข้าถึงได้จาก DMAC, ให้เช็ค the memory map ดู

-Connection of the hardware transfer request signal
   The interrupt signal จาก the Peripheral ที่รองรับ hardware transfer จะถูกเลือกใน the interrupt controller block (แสดงเป็น DRQSEL/DRQSEL1 ในรูป 2-1) มันจะถูกใช้เป็น the interrupt signal ไปหา CPU หรือ the DMA transfer request signal ไปหา DMAC อย่างใดอย่างหนึ่ง สำหรับ TYPE3 และ TYPE7 products, ดูที่บท "Interrupts(C)".

    เมื่อทำการ DMA transfer โดยการร้องขอจาก hardware, จะต่อ the interrupt signal จากแต่ละ Peripheral เป็นเหมือนกับ the transfer request signal ไปหา DMAC ก่อนโดยการเซท DRQSEL/DREQSEL1. The interrupt signal จาก the Peripheral ที่ไม่ได้รองรับ hardware transfer ไม่สามารถถูกใช้เป็น the DMA transfer request signal. เมื่อ the interrupt signal ถูกใช้เป็น the transfer request signal ไปหา DMAC แล้ว, มันก็ไม่สามารถที่จะถูกใช้เป็น the interrupt signal ไปหา CPU ได้ ดูที่บท "Interrupts"

    มันจะมี 32 DMA transfer request signals ที่ถูกใช้เป็นอินพุทไปหา DMAC. สำหรับการตรงกันระหว่างแต่ละ signal และ Peripheral, ดูที่ Table 2-1 ใน section ถัดไป. สำหรับ the TYPE 2 product, ฟังชั่นของ MDA Transfer Request Signals สามารถถูกขยายโดยการใช้ the extension selector (อ้างอิงได้เหมือนกันกับ "DQESLEL" ในรูป) ใน MDA Transfer Request Signals. ดูรายละเอียดที่ Table 2-2  สำหรับ products อื่นที่ไม่ใช่  TYPE 2 product, the function extension ไม่มีให้ใช้งาน
   Interrupt signals จาก the peripheral ที่ไม่ได้รวมไว้จะไม่สามารถถูกเลือกได้  ควรจำไว้ว่าสำหรับ a Peripheral ที่มีหลาย channels และหลาย interrupt factors, บาง interrupts รองรับ DMA transfer, ขณะที่ interrupts อื่นไม่รองรับ

-Connection of the hardware transfer request clear signal
   บาง the Peripherals ที่รองรับ hardware transfer ต้องการที่จะเคลียร์ the transfer request signal (interrupt signal) หลังจากการ transfer เสร็จสมบรูณ์ ถึงแม้ว่ามันไม่ได้แสดงไว้ในรูปที่ 2-1, the transfer request signal จะถูกเคลียร์สำหรับ Peripherals นั้นทาง DMAC โดยการเลือกมันโดย DRQSEL/DRQSEL1

-Connection of the hardware transfer stop request signal
   The multifunction serial unit (หลังจากนี้จะย่อว่า "MFS") จะเอาท์พุท the DMA transfer stop request signal. ถึงแม้ว่ามันไม่ได้แสดงไว้ในรูปที่ 2-1, MFS's transfer stop request signal จะถูกต่อไปถึง DMAC, เมื่อ MFS ถูกเลือกโดย DRQSEL/DRQSEL1. เมื่อ the transfer stop request signal แสดงสิทธิ์แล้ว, DMAC จะหยุด the transfer operation. มันจะถูกคอนฟิคให้ปิดบัง the succeeding transfer request signals.

-Interrupt signal from DMAC
    ถึงแม้ว่ามันไม่ได้แสดงไว้ในรูปที่ 2-1, an interrupt signal ที่ใช้แจ้งให้ทราบว่าการ transfer เสร็จสมบรูณ์นั้นถูกต่อไปถึง NVIC. แต่ละ channel มี 8 interrupt outputs.

tha

2.2. I/O Signals of DMAC
ในส่วนนี้อธิบายถึง the I/O signals of DMAC.

 Transfer Request Signals ทำเป็นอินพุทไปถึง DMAC
ตาราง 2-1 แสดงรายละเอียดของ transfer request signals ทำเป็นอินพุทไปถึง DMAC และ the interrupt signals จาก corresponding Peripherals.



tha

Function of extension selector(ฟังชั่นของตัวเลือกที่ขยายออกไปอีก)
    ใน TYPE2 product, transfer request signals input ใน IDREQ [10], [11], [24], [25], [26], [27], [30], และ [31] ของ DMAC จะถูกเลือกจากสัญญานที่แสดงในตาราง 2-2 ข้างล่างนี้โดย extension selector. เครื่องหมายของ "O" ในตารางแสดงว่ามันสามารถถูถเลือกได้   เครื่องหมายของ "X" แสดงว่ามันไม่สามารถถูถเลือกได้ ดูที่บท "Interrupts".




Interrupt Signals Output from DMAC
ตาราง 2-3 แสดงรายการของshows interrupt signals output จาก DMAC.



การอ้างอิง: Interrupt Generation Factors and Clearing (เพื่อรายละเอียด, ดูที่ "4 DMAC Control".)

   Interrupt จากแต่ละ channel ถูกทำให้เกิดขึ้นโดยปัจจัยดังต่อไปนี้ :

        - ในเวลา successful completion of channel transfer, "101" ถูกเซตไปที่ SS[2:0] ของแต่ละ channel. ถ้าค่าข้างบนนี้ถูกเซตไปที่ SS[2:0] พร้อมด้วย CI=1 (successful transfer completion interrupt enabled), a successful transfer completion interrupt จะเกิดขึ้น

       - ในเวลา unsuccessful completion of channel transfer, "001", "010", "011" and "100"  ถูกเซตไปที่ SS[2:0] ของแต่ละ channel. ถ้าค่าข้างบนนี้ถูกเซตไปที่ SS[2:0] พร้อมด้วย EI=1 (unsuccessful transfer completioninterrupt enabled), an unsuccessful transfer completion interrupt จะเกิดขึ้น

      - The successful transfer completion interrupt and the unsuccessful transfer completion interrupt ผ่าน logic OR; ดังนั้น, ถ้า interrupts อย่างใดอย่างหนึ่งเกิดขึ้น, an interrupt ก็จะเกิดขึ้นจาก channel นั้น
   
   Interrupt จากแต่ละ channel สามารถถูกเคลียร์โดยเขียน "000" ไปที่ SS[2:0].

tha

3. Functions and Operations of DMAC
ในส่วนนี้อธิบายถึงการทำงานของ DMAC ในแตละ transfer mode.
   3.1 Software-Block Transfer
   3.2 Software-Burst Transfer
   3.3 Hardware-Demand Transfer
   3.4 Hardware-Block Transfer & Burst Transfer
   3.5 Channel Priority Control

3.1. Software-Block Transfer
ในส่วนนี้อธิบาย Software-Block transfer.
   รูปที่ 3-1 โชว์ตัวอย่างการทำงานของ Software-Block transfer. ในรูปที่ 3-1, ใช้การเซตดังต่อไปนี้
     - Transfer mode : Software request Block transfer (ST=1, IS[5:0]=000000, MS=00)
     - Transfer source start address : SA(DMACSA=SA)
     - Transfer source address control : Increment and reload available (FS=0, RS=1) (ใช้งานการเพิ่มและโหลดค่าซ้ำ)
     - Transfer destination start address : DA(DMACDA=DA)
     - Transfer destination address control : Increment and reload not available (FD=0, RD=0) (ไม่ใช้งานการเพิ่มและโหลดค่าซ้ำ)
     - Transfer data size : Half-word (16 bits), the number of blocks = 2, the number of transfers = 3 (TW=01, BC=1, TC=2)
     - BC/TC reload : Reload available (RC=1) (ใช้งานโหลดค่าซ้ำ)



DMAC กระทำการทำงานดังต่อไปนี้, เมื่อข้อมูลการ transfer นี้ถูกเซตจาก CPU และจากนั้นการสตาร์ทของการ transfer ถูกสั่งขึ้น
      - เนื่องจากการระบุสเปคของ transfer data width นี้, แต่ละ transfer จะถูกกระทำโดย half-word (16 bits)
      - สอดคล้องกันกับ start addresses ของ transfer source และ transfer destination, การระบุสเปคของ data width และการเพิ่มขึ้น/คงที่, การ transfer
        จะถูกกระทำใน area นี้ จาก address SA ไปหา address DA, เป็นจำนวน blocks (=BC+1)
      - ในกรณีของ Block transfer, ช่องว่างระหว่างการ transfer (Transfer Gap) เกิดขึ้นทุกๆเวลาที่การ transfer บล๊อคหนึ่งเสร็จสมบรูณ์
.     - DMAC กระทำ data transfer เป็นจำนวนของบล็อค (=BC+1) คูณจำนวนของ transfers (=TC+1). ขนาดของ data ที่ถูก transfer โดยแต่ละ transfer ที่
        ร้องขอจาก CPU คือ "Data width (TW) x Number of blocks (BC+1) x Number of transfers (TC+1)".
      - เมื่อการ transfer เสร็จสมบรูณ์แล้ว DMAC แจ้ง CPU ให้ทราบถึงการเสร็จสมบรูณ์นั้น
      - ถ้าการสตาร์ทของ transfer ถูกสั่งขึ้นอีกครั้งหลังจากการ transfer เสร็จสมบรูณ์, การ transfer จะถูกสตาร์ทขึ้นใหม่จาก transfer start address (SA+0) อัน
        ก่อนหน้า, เพราะว่า transfer source address ได้ถูกเซตไว้เป็นให้โหลดซ้ำ(reload)(RS=1). ในขณะที่ transfer destination address ไม่ได้ถูกระบุไว้เป็น
        ให้โหลดซ้ำ (RD=0), การ transfer จะถูกสตาร์ทจากแอดเดรสถัดไป (DA+12) หลังจากแอดเดรสที่จบลงในการ transfer ก่อนหน้า พร้อมทั้งขณะที่การโหลดซ้ำ
        ของ BC/TC ถูกระบุ, ค่าเดียวกันกับการ transfer ก่อนหน้าถูกโหลดซ้ำ(reload)เพื่อจำนวนของบล็อคและจำนวนของ transfers สำหรับการ transfer ครั้งถัดไป.

ช่องว่างระหว่างการ transfer(Transfer Gap) คือคาบเวลาที่ซึ่งการ transfer ไม่ถูกทำให้ทำงาน, และมันจะถูกสอดใส่เพื่อป้องกันหนึ่งใน DMAC channels จากการครอบครอง system bus access right.  ถ้าหลาย channels มีการร้องขอการ transfer, DMAC จะสวิทช์ชาแนลเหล่านั้นที่จะกระทำการ transfer operation ที่เวลาของTransfer Gap. ความถี่ของการเกิด Transfer Gap สามารถถูกควบคุมโดยการปรับการเซตของ BC และ TC

อย่างไรก็ตาม,การเข้าถึงบัสอย่างถูกต้องนี้(bus access right) ก็ยังส่งผ่านไปถึง CPU ที่เวลา Transfer Gap อีกด้วย System buses ใน product นี้อยู่ใน Multi-layered configuration พร้อมด้วย system bus พิเศษที่กำหนดให้ใช้กับ DMA. ด้วยเหตุผลนี้, ถ้าไม่มีการขัดแย้งระหว่าง CPU และปลายทางที่เข้าถึง, transfer สามารถถูกกระทำที่เวลาเดียวกันกับการทำงานของ CPU. ถึงแม้ว่ามีการขัดแย้งระหว่าง CPU และปลายทางที่เข้าถึง, การทำงานของ CPU จะมีผลกระทบเพียงเล็กน้อยตราบเท่าที่ DMAC transfer อยู่ใน address area group ต่างกัน(RAM and Peripheral, or Flash memory and RAM, etc). อย่างไรก็ตาม ถ้าการ transfer อยู่ใน address area group เดียวกัน(RAM and RAM, etc.), the CPU operation and/or system performance อาจจะมีผลกระทบ ขึ้นอยู่กับจำนวนของบล็อคที่ใช้  ; ดังนั้นจึงควรระมัดระวัง

("Address area group" ที่กล่าวถึงข้างบนนี้อ้างอิงถึง a group of address areas ที่ถูกต่ออยู่บน AHB system bus ซึ่งมี bus bridge เดียวกัน.)