MF9BF506N DMAC

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

Previous topic - Next topic

Lastman

สุดยอด ยอดเยี่ยมครับ เรื่อง ARM ทีไรคิดถึงท่าน tha ก่อนใครทุกทีเลย ;)

tha

ขอบคุณที่ชมครับ พอดีผมว่างก็เลยศึกษาไว้ ชอบทางนี้ ชอบ ARM ด้วย กำลังอ่านทำความเข้าใจเบอร์นี้ เลยแปลไปด้วยเลย เผื่อท่านอื่นจะสนใจหรือมีประโยชน์บ้าง  :)

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



DMAC กระทำการทำงานดังต่อไปนี้, เมื่อข้อมูลการ transfer นี้ถูกเซตจาก CPU และจากนั้นการสตาร์ทของการ transfer ถูกสั่งขึ้น
       - เนื่องจากการระบุสเปคของ transfer data width นี้, แต่ละ transfer จะถูกกระทำโดย word (32 bits).
       - ตามที่กำหนดไว้ของ start addresses ของ transfer source และ transfer destination, การระบุสเปคของ data width และการเพิ่มขึ้น/คงที่, การ
         transfer จะถูกกระทำใน area นี้ จาก address SA ไปหา address DA, เป็นจำนวน blocks (=BC+1) ตามที่ transfer source address ถูกระบุเป็นแบบ
         คงที่, มันจะเป็นค่าคงเดิมคือ transfer source start address (SA+0)
       - ในกรณีของ Burst transfer, การ transfer จะถูกปฏิบัติอย่างต่อเนื่องโดยไม่มีการเกิด Transfer Gaps.
       - 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 ให้ทราบถึงการเสร็จสมบรูณ์นั้น

ในกรณีของ Burst transfer, Transfer Gap ไม่ถูกทำให้เกิดขึ้น, ไม่เหมือนกับ Block transfer. ตามที่ชาแนลนั้นถูกควบคุมให้ครองครองเข้าถึงอย่างถูกต้องต่อ system bus, มันสามารถใช้การใส่ลำดับความสำคัญ (priority) บนที่ channel นั้นๆ.
     


tha

3.3. Hardware-Demand Transfer
ในส่วนนี้อธิบาย Hardware-Demand transfer.
       Hardware-Demand transfer ถูกใช้เมื่อกระทำ DMA transfer โดยมีสัญญานร้องขอการtransfer (transfer request signal) จาก Peripherals of USB, MFS and ADC

       Hardware-Demand transfer เป็นวิธีที่ใช้รับ transfer request signal จาก Peripherals ด้วยระดับของสัญญาน(signal level). ถ้า transfer request signal อยู่ในระดับ High level, transfer จะปฏิบัติการ. ถ้า transfer request signal อยู่ในระดับ Low level, transfer จะไม่ปฏิบัติการ. Transfer ปฏิบัติการโดยการเซตเอาท์พุทของ interrupt signal จากแต่ละ Peripheral ไปเป็นระดับ High level (ด้วย interrupt request) เมื่อมี transfer data, หรือไปเป็นระดับ Low level (ปราศจาก transfer request) เมื่อไม่มี transfer data.

       ในกรณีของ Hardware-Demand transfer, ระบุจำนวนของบล็อคให้เป็น "1" (BC=0) เสมอ

       รูปที่ 3-3 แสดงตัวอย่างของการทำงานของ Hardware-Demand transfer. ในตัวอย่างนี้, ใช้การเซตดังต่อไปนี้. การเซตของ addresses ของ transfer source และ transfer destination พร้อมด้วย transfer data width ถูกเอาออก

         - Transfer mode : Hardware-Demand transfer (ST=0, IS= Peripheral ที่เป็น transfer request source, MS=10)
         - Transfer data size : Number of blocks = 1, Number of transfers = 3 (BC=0, TC=2)



      การทำงานของ Hardware-Demand transfer เป็นดังต่อไปนี้ :

      การสตาร์ทของการทำงานถูกสั่งขึ้นโดยการระบุเนื้อหาการ transfer จาก CPU. DMAC จะคอย transfer request จาก Peripheral. หลังจากได้รับ transfer request, มันจะกระทำการ transfer หนึ่งและจะคอยสัญญาน transfer request ถัดไป. ในระหว่างเวลาที่คอย Transfer Gap ถูกทำให้เกิดขึ้น. ทุกๆเวลาที่ได้รับ transfer request, มันจะกระทำการทำงานเหมือนเดิมเป็นจำนวนของ transfers (TC+1)(น่าจะเป็นจำนวนของบล็อค(BC=0)มากกว่า). จำนวนของการ transfers ทั้งหมดที่ถูกกระทำคือ (TC+1). number of transfer requests จาก the Peripheral และ the number of DMAC transfers (TC+1) จะเท่ากัน. เมื่อการ transfers ทั้งหมดเสร็จสมบรูณ์, DMAC จะแจ้ง CPU ถึงการเสร็จสมบรูณ์นั้น

ช่วงนี้อากาศร้อน จะแปลได้แต่ตอนกลางคืน(ตื่นขึ้นมาแปล) ตอนกลางวันผู้รับเหมากำลังมาทำบ้าน เสียงดังและอากาศร้อนด้วยเลยแปลไม่ไหว บ้านเสร็จแล้วต้องเดินไฟอีกช่วงนี้อาจขาดช่วงไปบ้าง ท่านใดติดตามอยู่ก็อ่านล่วงหน้าหรือแปลแทนผมไปเลยก็ได้ โดยทั่วไปพวก manual ประโยคจะเป็น passive voice เป็นส่วนมาก คือจะเน้นกรรม(ตัวถูกกระทำ) เอากรรมมาเป็นประธาน + verb to be + กริยาช่องที่ 3 คำศัพท์ก็จะซ้ำๆกัน แปลไปสักพักก็คงจำได้หมดสำหรับมือใหม่  :)


tha

3.4. Hardware-Block Transfer & Burst Transfer
ในส่วนนี้อธิบาย Hardware-Block transfer and Burst transfer.
      Hardware-Block transfer หรือ Hardware-Burst transfer ถูกใช้เมื่อกระทำการ DMA transfer โดย transfer request signal จาก Peripheral ของ the base timer หรือ external interrupt

      Hardware-Block transfer and Hardware-Burst transfer คือวิธีที่ใช้รับ transfer request signal ที่ขอบขาขึ้นของสัญญาน การ Transfer จะถูกปฏิบัติการเมื่อขอบขาขึ้นของ transfer request signal ถูกตรวจพบ. DMAC's transfer start timing สามารถถูกระบุโดยเอาท์พุทของ interrupt signal จากแต่ละ Peripheral.

      รูปที่ 3-4 แสดงตัวอย่างของการทำงานของ Hardware-Block transfer. ในรูปที่ 3-4e, ใช้การเซตดังต่อไปนี้. การเซตของ addresses ของ transfer source และ transfer destination พร้อมด้วย the transfer data width ถูกเอาออก

        - Transfer mode : Hardware-Block transfer (ST=0, IS= Peripheral ที่เป็น the transfer request source, MS=00)
        - Transfer data size : Number of blocks = 4, Number of transfers = 3 (BC=3, TC=2)



      การทำงานของ Hardware-Block transfer เป็นดังต่อไปนี้ :

       การสตาร์ทของการทำงานถูกสั่งขึ้นโดยการระบุเนื้อหาของการ transfer จาก CPU. DMAC จะคอย transfer request จาก Peripheral  หลังจากได้รับ transfer request, มันจะกระทำการ transfers เป็นจำนวน number of blocks (=BC+1) และจากนั้นจะคอย transfer request ถัดไป. ในระหว่างเวลาที่คอย Transfer Gap ถูกทำให้เกิดขึ้น.  ทุกๆเวลาที่ได้รับ transfer request, มันจะกระทำการทำงานเหมือนเดิมเป็นจำนวนของ transfers (TC+1)(น่าจะเป็นจำนวนของบล็อค (BC+1) มากกว่า) จำนวนของการ transfers ทั้งหมดที่ถูกกระทำคือ (BC+1) x (TC+1). the number of transfer requests จาก the Peripheral และ the number of DMAC transfers (TC+1) จะเท่ากัน. เมื่อการ transfers ทั้งหมดเสร็จสมบรูณ์, DMAC จะแจ้ง CPU ถึงการเสร็จสมบรูณ์นั้น

      รูปที่ 3-5  แสดงตัวอย่างของการทำงานของ Hardware-Burst transfer.  ในรูปที่ 3-5, ใช้การเซตดังต่อไปนี้. การเซตของ addresses ของ transfer source และ transfer destination พร้อมด้วย the transfer data width ถูกเอาออก

         - Transfer mode : Hardware-Burst transfer (ST=0, IS= Peripheral ที่เป็น the transfer request source, MS=01)
         - Transfer data size : Number of blocks =4, Number of transfers = 5 (BC=3, TC=4)



      การทำงานของ Hardware-Burst transfer เป็นดังต่อไปนี้ :
      การสตาร์ทของการทำงานถูกสั่งขึ้นโดยการระบุเนื้อหาของการ transfer จาก CPU. DMAC จะคอย transfer request จาก Peripheral. หลังจากได้รับ transfer request แรก, มันจะกระทำการ transfers ทั้งหมดเป็นจำนวนของผลการคูณที่คำนวณโดย (BC+1) x(TC+1). ในระหว่าง Hardware-Burst transfer, Transfer Gap ไม่ถูกทำให้เกิดขึ้น เมื่อการ transfers ทั้งหมดเสร็จสมบรูณ์, DMAC จะแจ้ง CPU ถึงการเสร็จสมบรูณ์นั้น

tha

3.5. Channel Priority Control(ตัวควบคุมลำดับระดับความสำคัญของชาแนล)
ในส่วนนี้อธิบาย the channel priority control.

 Channel Priority Control
      ถ้าหลายๆ channels มี transfer requests, DMAC สวิทช์ channel ทำให้มีการ transfer ในหมู่ของมันที่เวลาของ Transfer Gap ของแต่ละ channel. ณ จุดนี้, channel ถัดไปที่ จะกระทำการ transferจะถูกตัดสินตามที่กำหนดโดย the priority control. The priority control สามารถถูกเลือกจาก fixed priority หรือ rotated priority อย่างใดอย่างหนึ่งโดย the PR. รูปที่ 3-6 แสดงไดอะแกรมการอธิบาย. ในรูปนี้, แกนขวาบ่งบอกแกนเวลา ลูกศรบ่งบอก transfer timings ของแต่ละ channel ที่กระทำการ transfer operation ของมันเมื่อทุกๆ channels เกิด transfer requests ขึ้นพร้อมกัน

 Operation in Fixed Priority Mode (PR=0)
     ใน fixed priority mode, the channel ซึ่งมีหมายเลขชาแนลน้อยสุดในหมู่ของทุกชาแนลนั้นซึ่งมี a transfer request มี priority ที่กระทำการ transfer operation.

(Priority order(ลำดับ) : ch.0 > ch.1 > ch.2 > ch.3 > ch.4 > ch.5 > ch.6 > ch.7)

     อย่างแรก, the channel ซึ่งมี priority สูงสุดกระทำการ transfer ของมัน(ch.0 ในรูปที่ 3-6). เมื่อ the channel ซึ่งมี priority สูงสุดหยุดการ transfer operation ลงชั่วคราว ณ ที่เวลาของ Transfer Gap, จากนั้น, the channel ซึ่งมี priority สูงสุดลำดับที่สองกระทำการ transfer operation ของมัน(ch.1 in Figure 3-6). ด้วยเหตุนี้, channel ซึ่งมี priority สูงสุดและ channel ซึ่งมี   priority สูงสุดลำดับที่สองกระทำการ transfer operations สลับกันไป. หลังจากนั้น, เมื่อ the channel ซึ่งมี priority สูงสุดเสร็จสิ้นการ transfer ของมัน, the channel ซึ่งมี priority ต่ำกว่าจะสตาร์ทการ transfer operation ของมัน (ch.3 in Figure 3-6).

 Operation in Rotated Priority Mode (PR=1)
    ใน rotate priority mode, ทุก channels กระทำการ transfer operations ของมันอย่างเท่าเทียมกัน


tha

4. DMAC Control
ในส่วนนี้อธิบาย DMAC control methods ในรายละเอียด
     4.1 Overview of DMAC Control
     4.2 DMAC Operation and Control Procedure for Software Transfer
     4.3 DMAC Operation and Control Procedure for Hardware (EM=0) Transfer
     4.4 DMAC Operation and Control Procedure for Hardware (EM=1) Transfer

4.1. Overview of DMAC Control
ในส่วนนี้จัดให้มีการอธิบายโดยสรุปของ DMAC control.
     The control register ของแต่ละชาแนลของ DMAC มี EB (บิตเปิดใช้งานการทำงานส่วนตัวของชาแนล) (individual-channel operation enable bit) และ PB (บิตพักไว้ชั่วคราวการทำงานส่วนตัวของชาแนล)(individual-channel pause bit). โดยการจัดการกับบิตเหล่านี้, การสตาร์ทของ DMA transfer operation (เปิดใช้งานการทำงาน), บังคับให้สิ้นสุดการ transfer operation (ปิดใช้งานการทำงาน) และการพักไว้ชั่วคราวของการ transfer operation สามารถถูกควบคุมโดย channel นั้นๆ. The control register มี DE (all-channel operation enable bit) and DH (all-channel pause bit) อีกด้วย, ซึ่งยอมให้การ transfer operations ของทุกชาแนลถูกควบคุมเพียงที่เดียว

       แต่ละชาแนลเริ่มแรกจะอยู่ในสถานะห้ามทำงาน(operation-prohibited state) (สถานะปิดการใช้งาน) ในตอนที่ the transfer content (the address of the transfer source, the address of the transfer destination, the transfer data width, the number of transfers, the transfer mode, etc.) ถูกกำหนดสำหรับแต่ละชาแนลไปยัง configuration register ของมัน. ดังนั้นการ transfer operations จะถูกควบคุมโดยการเขียนไปยัง EB, PB, DE และ DH เพื่อสั่งให้การ transfer operations สตาร์ทหรือพักไว้ชั่วคราว

      เมื่อแต่ละชาแนลเสร็จสิ้นการ transfer ของมัน, มันจะเซต the end code ไปยัง SS (Stop Status) เพื่อแจ้งให้ทราบถึงสถานะหยุดของมัน. An interrupt สามารถถูกทำให้เกิดขึ้นเมื่อเสร็จสิ้นการ transfer. หลังจากการ transfer จบลง, แต่ละชาแนลจะเคลียร์บิต EB และ PB และกลับไปอยู่ในสถานะห้ามทำงาน (Disable state).

    ในส่วนต่อไปนี้จะอธิบายการทำงานของขบวนการควบคุมของ DMA transfer โดย software request และ hardware DMA transfer โดย transfer request จาก Peripherals

    ถ้อยคำดังต่อไปนี้ถูกใช้ในการอธิบายเป็นคำสั่งจาก CPU, ซึ่งอ้างอิงถึงการเขียนค่าดังต่อไปนี้ไปยัง the EB, PB, DE and DH bits.

     - Instruction to enable individual-channel operation (write EB=1, PB=0)
     - Instruction to disable individual-channel operation (write EB=0)
     - Instruction to pause individual-channel operation (write EB=1, PB=1)
     - Instruction to enable all-channel operation (write DE=1, DH=0000)
     - Instruction to disable all-channel operation (write DE=0)
     - Instruction to pause all-channel operation (write DE=1, DH=0000) (ตรงนี้ DH ไม่น่าเท่ากับ 0000)

tha

4.2. DMAC Operation and Control Procedure for Software Transfer
ในส่วนนี้อธิบาย DMAC operation and control procedure for software transfer



     รูปที่ 4-1 แสดงไดอะแกรมการเปลี่ยนผ่านของสถานะของชาแนลที่ถูกควบคุมของ software transfer. ตัวเลขถัดจากเส้นเปลี่ยนผ่านในรูปจะตรงกันกับตังเลขซึ่งปรากฏใน control procedures ที่จะกล่าวต่อไป. เส้นเปลี่ยนผ่านทึบบ่งบอกถึงการเปลี่ยนผ่านของสถานะที่ถูกสั่งโดย CPU, ขณะที่เส้นเปลี่ยนผ่านปะบ่งบอกถึงการเปลี่ยนผ่านของสถานะเนื่องจาก DMAC operation.

-Description of Each State(คำอธิบายของแต่ละสถานะ)

    Disable state(สถานะไม่ทำงาน)
         ในสถานะนี้การ transfer ของชาแนลที่ถูกควบคุมจะถูกห้ามไว้  Channels ในสถานะนี้จะไม่ทำอะไรและจะคอยคำสั่งจาก CPU. ณ ที่ system reset, DE=0, EB=0, DH=0000 and PB=0 ใช้กับ Disable state นี้.

    Transfer state
         ในสถานะนี้การ transfer ของชาแนลที่ถูกควบคุมจะถูกเปิดใช้งาน Channels ในสถานะนี้กระทำการ transfer operation ตามที่ระบุไว้. เมื่อการ transfer operations ทั้งหมดเสร็จสมบรูณ์, ชาแนลจะกลับไปสู่ Disable state. สถานะจะถูกเปลี่ยนตามคำสั่งโดย CPU อีกด้วย.

     Pause state
         ในสถานะนี้ชาแนลที่ถูกควบคุมจะพักการ transfer operation ของมันเนื่องจากคำสั่งให้พักที่ออกโดย CPU, และกำลังคอยคำสั่งอื่นจาก CPU.

tha

 Explanation of Control Procedure(การอธิบายถึงขบวนการควบคุม)
1. Disable state / Preparation for transfer (สถานะปิดใช้งาน/เตรียมการสำหรับการ transfer)
     ระบุ the transfer content(คงหมายถึงค่าที่จะเขียนไปยังรีจีสเตอร์ต่างๆ) สำหรับชาแนลที่ถูกควบคุมโดยทาง CPU (การเขียนไปถึง DMACSA, DMACDA, DMACA and DMACB). สำหรับรายละเอียดของ transfer content ที่ถูกระบุ, ดูใน section describing register functions. เมื่อต้องการทำให้เกิด interrupt จาก DMAC ในเวลาที่การ  transfer เสร็จสมบูรณ์, เซตบิต EI และ CI.

     ข้อจำกัดดังต่อไปนี้ใช้กับ software transfer. ระบุ ST=1 และ IS[5:0]=000000. Demand transfer mode ไม่สามารถถูกระบุไปถึง MS. เซต "0" ไปถึง EM เสมอ

     การให้คำสั่งเปิดใช้งานการทำงานทุกชาแนลและเซต PR ข้อมูลนี้สามารถถูกเขียนไปยัง DMACA ที่เวลาเดียวกันกับใน Step 2 ได้อีกด้วย.

2. Disable state => Transfer state / Start of transfer
    ให้คำสั่งเปิดใช้งาน individual-channel operation จาก CPU. เมื่อ DE=1, EB=1, DH=0000 และ PB=0 ถูกเซต, the channel ที่ถูกควบคุมจะเคลื่อนไปสู่ Transfer state

3. Transfer state
     เมื่อชาแนลใน Transfer state กลายเป็นสภาวะเปิดใช้งานเพื่อเข้าถึง system bus, มันจะทำการ transfer หนึ่งตามที่กำหนดโดย the transfer content (มันอาจจะใช้เวลาในการสตาร์ทการ transfer, ขึ้นอยู่กับสภาวะของชาแนลอื่นๆ). ในกรณีของ Block transfer, a Transfer Gap ถูกทำให้เกิดขึ้นทุกๆเวลาที่ TC ถูกอัฟเดต ในกรณีของ Burst transfer, จะไม่เกิด Transfer Gap. ในระหว่างการ transfer operation, BC, TC, DMACSA and DMACDA จะแสดงถึงการเหลืออยู่ของ number of transfers และ the transfer address ที่เวลา ณ จุดนั้น. The transfer status สามารถถูกเช็คโดยการอ่านจาก CPU.

    การระบุ transfer content ไม่สามารถที่จะถูกเปลี่ยนได้โดยทาง CPU ไปถึง the channel นั้นใน Transfer state (การเขียนใหม่ไปถึง DMACSA, DMACDA, DMACA[29:0], DMACB[31:1]). (อย่างไรก็ตาม, EB, PB และ EM สามารถถูกเขียนใหม่ได้.)