Electoday 2025

ไมโครคอนโทรลเลอร์ => ARM Processors => Topic started by: tha on February 18, 2015, 08:36:17 AM

Title: MF9BF506N DMAC
Post by: tha on February 18, 2015, 08:36:17 AM
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 ก็แล้วกัน เริ่มต้นกันไว้ก่อน ช่วงนี้เข้าฤดูร้อนแล้วคงไปได้ช้าเพราะจะอ่านหนังสือไม่ค่อยได้ไม่เหมือนหน้าหนาว
Title: Re: MF9BF506N DMAC
Post by: tha on February 18, 2015, 02:48:15 PM
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). 
Title: Re: MF9BF506N DMAC
Post by: tha on February 20, 2015, 08:17:57 AM
- 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
Title: Re: MF9BF506N DMAC
Post by: tha on February 21, 2015, 01:09:28 PM
- 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".
Title: Re: MF9BF506N DMAC
Post by: tha on February 22, 2015, 07:25:23 AM
2.1. DMAC and System Configuration
ในส่วนนี้อธิบายถึง DMAC และ system configuration ของมัน

(http://i.imgur.com/i34Miht.png)

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.
Title: Re: MF9BF506N DMAC
Post by: tha on February 23, 2015, 08:47:25 AM
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.

(http://i.imgur.com/thVgyBf.png)
(http://i.imgur.com/wIzotx7.png)
Title: Re: MF9BF506N DMAC
Post by: tha on February 24, 2015, 05:53:10 AM
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".

(http://i.imgur.com/SMUWbVd.png)


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

(http://i.imgur.com/tBPftz1.png)

การอ้างอิง: 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].
Title: Re: MF9BF506N DMAC
Post by: tha on February 26, 2015, 06:25:35 AM
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) (ใช้งานโหลดค่าซ้ำ)

(http://i.imgur.com/z9h5nFK.png)

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 เดียวกัน.)
Title: Re: MF9BF506N DMAC
Post by: Lastman on February 26, 2015, 08:04:07 AM
สุดยอด ยอดเยี่ยมครับ เรื่อง ARM ทีไรคิดถึงท่าน tha ก่อนใครทุกทีเลย ;)
Title: Re: MF9BF506N DMAC
Post by: tha on February 27, 2015, 06:26:42 AM
ขอบคุณที่ชมครับ พอดีผมว่างก็เลยศึกษาไว้ ชอบทางนี้ ชอบ 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 เป็นแบบโหลดค่าซ้ำ)

(http://i.imgur.com/KGCJFD3.png)

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 นั้นๆ.
     

Title: Re: MF9BF506N DMAC
Post by: tha on March 02, 2015, 03:53:59 AM
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)

(http://i.imgur.com/adWGZAJ.png)

      การทำงานของ 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 คำศัพท์ก็จะซ้ำๆกัน แปลไปสักพักก็คงจำได้หมดสำหรับมือใหม่  :)
Title: Re: MF9BF506N DMAC
Post by: tha on March 03, 2015, 04:46:24 AM
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)

(http://i.imgur.com/H8FrFOk.png)

      การทำงานของ 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)

(http://i.imgur.com/Tw9BpkI.png)

      การทำงานของ 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 ถึงการเสร็จสมบรูณ์นั้น
Title: Re: MF9BF506N DMAC
Post by: tha on March 04, 2015, 03:39:43 AM
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 ของมันอย่างเท่าเทียมกัน

(http://i.imgur.com/54qUDDQ.png)
Title: Re: MF9BF506N DMAC
Post by: tha on March 06, 2015, 05:13:51 AM
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)
Title: Re: MF9BF506N DMAC
Post by: tha on March 09, 2015, 02:16:38 AM
4.2. DMAC Operation and Control Procedure for Software Transfer
ในส่วนนี้อธิบาย DMAC operation and control procedure for software transfer

(http://i.imgur.com/WPLaQOF.png)

     รูปที่ 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.
Title: Re: MF9BF506N DMAC
Post by: tha on March 11, 2015, 04:47:53 AM
 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 สามารถถูกเขียนใหม่ได้.)
Title: Re: MF9BF506N DMAC
Post by: tha on March 13, 2015, 04:34:37 AM
4. Transfer state => Disable state / Successful completion of transfer
เมื่อการ transfers สำเร็จสมบูรณ์แล้วเป็นจำนวนผลคูณที่คำนวณโดย (BC+1) x (TC+1), ชาแนลใน Transfer state จะเคลียร์ EB, PB และ ST และเคลื่อนไปสู่ Disable state. มันเซต SS=101 เพื่อแจ้งให้ทราบถึงการเสร็จสมบรูณ์นั้น. ดูตัวอย่างที่ 1 ในรูปที่ 4-2. ถ้า successful transfer completion interrupt ถูกเปิดใช้งานก่อนแล้วโดย CI, an interrupt ก็จะเกิดขึ้น. ถ้าการโหลดซ้ำ(reload)ถูกระบุถึง BC, TC, DMACSA and DMACDA, การ reload นั้นจะถูกกระทำตามที่กำหนดโดย the specified transfer content(คงหมายถึงค่าที่จะเขียนไปยังรีจีสเตอร์ต่างๆ).

(http://i.imgur.com/w49Eb0s.png)

ช่วงนี้หันมาใช้ firfox เพราะ chrome มีปัญหา pop up หรือคุกกี้ ที่ขึ้นมาที่มุมด้านล่างขวา ไม่รู้เป็นเหมือนกันหรือเปล่า  :o
Title: Re: MF9BF506N DMAC
Post by: tha on March 14, 2015, 02:35:10 AM
5. Transfer state => Disable state / Transfer error stop
     The channel ใน Transfer state ยกเลิกขบวนการการ transfer ไว้ชั่วคราว, ถ้าเกิด an address overflow, transfer source access error หรือ transfer destination access error. มันจะเคลียร์ EB, PB และ ST และเคลื่อนไปสู่ Disable state. มันจะเซตค่าที่แสดงการ error นั้นไปยัง SS[2:0] เพื่อแจ้งให้ทราบถึง error ที่ทำให้หยุด (error stop). ดูตัวอย่างที่ 2 ในรูปที่ 4-2. ถ้า unsuccessful transfer completion interrupt ถูกเปิดใช้งานไว้ก่อนแล้วโดย EI, an interrupt จะเกิดขึ้น. BC, TC, DMACSA and DMACDA ซึ่งการ reload ไม่ได้ระบุไว้จะคงค่าเซตที่เวลาที่การ transfer ถูกยกเลิกนั้น

โดยปกติ, a transfer error เกิดขึ้น, เมื่อมีความพยายามที่จะเข้าถึง address area ที่ไม่มีอยู่ใน system bus หรือ an address area ที่ห้ามเข้าถึงจาก DMAC. จะไม่มี error เกิดขึ้นในการใช้งานทั่วไป
Title: Re: MF9BF506N DMAC
Post by: tha on March 14, 2015, 03:13:07 PM
    อยากจะทำบอร์ด MB9BF506N สักบอร์ด เอาไว้ติดต่อกับตัว stamp จะกัดแผ่นปริ้นท์เองก่อน แผ่นปริ้นท์หน้าเดียวง่ายๆ ใช้ pcb conver smd ตัวนี้ครับ http://www.ett.co.th/product/pcb/ET-PCB-TQFP100.html (http://www.ett.co.th/product/pcb/ET-PCB-TQFP100.html) พอดีมีของอยู่ ทำแบบมี jtag port , ไม่มี power supply(เอาไว้นอกบอร์ดจะได้เปลี่ยน 5V หรือ 3.3V ได้) ทำ I/O port pin
     ควรมีอะไรเพิ่มเติมอีกครับ จอ LCD ควรทำ port pin เอาไว้หรือเปล่าหรือใช้สายต่อเอา ท่านใดมีประสบการณ์แนะนำหน่อย :)
http://www.es.co.th/vp.asp?keyword=&catc=034016&mfrc=001&F2=ARM&t=1 (http://www.es.co.th/vp.asp?keyword=&catc=034016&mfrc=001&F2=ARM&t=1)
Title: Re: MF9BF506N DMAC
Post by: tha on March 16, 2015, 04:44:04 AM
6. Transfer state, Pause state => Disable state / Forced transfer stop
     ถ้ามีคำสั่งให้ปิดการใช้งาน individual-channel operation หรือมีคำสั่งให้ปิดการใช้งาน all-channel operation ออกมาจาก CPU ไปถึง channel หนึ่งใน Transfer state หรือ Pause state, การ transfer operation ของชาแนลนั้นสามารถถูกบังคับให้หยุด (สำหรับการทำงานเมื่อมีคำสั่งให้ปิดการใช้งานการทำงานที่ออกมาไปหาชาแนลใน Disable state, ดู Step 11 ใน the software procedure).

    ถ้าคำสั่งนี้ถูกให้จาก CPU, ชาแนลที่ถูกสั่งนั้นจะยกเลิกการ transfer process ของมัน. มันจะเคลียรื EB, PB และ ST และเคลื่อนไปสู่ Disable state.  มันเซต SS[2:0]=010 และแจ้งให้ทราบถึงการ transfer ของชาแนลที่ถูกบังคับหยุดนั้น ถ้า unsuccessful transfer completion interrupt ถูกเปิดใช้งานไว้ก่อนแล้วโดย EI, an interrupt จะเกิดขึ้น. BC, TC, DMACSA และ DMACDA ซึ่งการ reload ไม่ได้ระบุไว้จะคงค่าเซตที่เวลาที่การ transfer ได้ถูกยกเลิก

   หลังจากคำสั่งนี้ออกจาก CPU, การ transfer จะหยุดที่เวลาเมื่อชาแนลที่ถูกสั่งนั้นไม่กำลังกระทำการ transfer (ใน Transfer Gap ก่อน the transfer starts), ดังแสดงในตัวอย่างที่ 3 ใน Figure 4-2. ในกรณีของ a channel ใน Pause state, การ transfer จะหยุดลงทันที จะมีเวลาที่แตกต่างกัน(Transition state)ระหว่างการออกคำสั่งและการหยุด มันอาจใช้เวลาบ้างขึ้นอยู่กับการเซตของ BC. ดังนั้นการ transfer ใหม่ไม่สามารถถูกเซตหรือสตาร์ทในช่วงเวลานี้, ต้องแน่ใจเสมอว่าการทำงานได้หยุดลงก่อนที่จะเซตการ transfer ถัดไป

   ใกรณีของมีคำสั่งให้ปิดการใช้งาน all-channel operation, เวลาที่หยุดจะแปรถันขึ้นอยู่กับ the channel.ขณะที่ DS ถูกเซตเมื่อชาแนลทั้งหมดหยุด, ก็จะสามารถยืนยันได้ว่าชาแนลทั้งหมดได้หยุดลงแล้ว

   ถึงแม้ว่าคำสั่งนี้ออกจาก CPU, การ transfer อาจจะไม่ถูกบังคับหยุด และอาจจะเสร็จการ transfer โดยสมบูรณ์แทน เนื่องจากปัจจัยอย่างเช่น transfer mode (Burst/Block/Demand) และ transfer status (จำนวนของการ transfers ที่กระทำ, เวลาที่ออกคำสั่งปิดการใช้งานการทำงาน). ถ้า transfer error เกิดขึ้นก่อนที่การ transfer จะหยุด, error stop นำไปใช้กับการ transfer อีกด้วย
Title: Re: MF9BF506N DMAC
Post by: tha on March 20, 2015, 05:06:35 AM
7. Disable state / Post-transfer process(หลังขบวนการ transfer)
  SS ถูกอ่านจาก CPU เพื่อเช็คสถานะของการเสร็จสมบูรณ์ของการ transfer. CPU เคลียรื SS เพื่อเตรียมการสำหรับการ transfer ถัดไป. ถ้า interrupts ถูกเปิดใช้งานเอาไว้แล้ว, the interrupt signal จาก DMAC จะถูกถอดการถือสิทธิ์นั้นโดยการเคลียร์ SS.

   ในกรณีที่สำเร็จโดยสมบูรณ์, CPU รีเซต the transfer content, ตามที่ต้องการ. ถ้าแต่ละการโหลดซ้ำ(reload) ถูกระบุเอาไว้แล้ว, ค่าที่เซตก่อนการสตาร์ทการ transfer จะถูกโหลดซ้ำไปที่ BC, TC, DMACSA และ DMACDA. ถ้าแต่ละการโหลดซ้ำ(reload) ไม่ถูกระบุเอาไว้, BC และ TC จะถูกตั้งต้นที่ "0". DMACSA และ DMACDA แสดง address ของการ transfer ถัดไป

   ในกรณีของ error stop และ forced stop, BC, TC, DMACSA และ DMACDA ต้องถูกรีเซตเสมอ, เพราะว่ามันอาจจะมีค่าที่เซตไว้ ณ ทีเวลาที่มีการยกเลิกนั้น

   ถ้าการ transfer ถูกทำให้หยุดเนื่องจากคำสั่งปิดการใช้งาน all-channel operation, DE ถูกเซตให้เป็น "0"; ดังนั้นการ transfer ถัดไปจะต้องการคำสั่งเปิดการใช้งาน all-channel operation และคำสั่งเปิดการใช้งาน individual-channel operation.
Title: Re: MF9BF506N DMAC
Post by: tha on March 23, 2015, 12:04:27 AM
8. Transfer state / Transfer pause
    ถ้าคำสั่งที่ส่ง individual-channel operation ไปหยุดพักหรือคำสั่งที่ส่ง all-channel operation ไปหยุดพักถูกสั่งออกจาก CPU ไปยัง channel ใน Transfer state, การ transfer operation ของ channel(s) นั้นสามารถถูกส่งไปหยุดพัก (สำหรับการทำงานเมื่อมีคำสั่งที่ส่งให้การทำงานไปหยุดพักถูกสั่งออกมาไปหา a channel ใน Disable state, ดุ Step 11 ใน the software procedure).

   ถ้าคำสั่งที่ถูกให้จาก CPU, the relevant channel(s) นั้นจะค้างขบวนการ  transfer ไว้ชั่วคราว มันจะเซต SS=111 และแจ้งให้ทราบถึงการที่มันอยู่ใน Pause state. ในกรณีนี้  interrupt ไม่สามารถเกิดขึ้นได้

   หลังจากคำสั่งจาก CPU, การ transfer จะหยุดที่เวลาเมื่อ the relevant channel นั้นไม่กระทำการ transfer (ใน Transfer Gap ก่อนการสตาร์ทของการ transfer). จะมีช่วงเวลาที่แตกต่าง (Transition state) ระหว่างการออกคำสั่งและการหยุด มันอาจใช้เวลาช่วงหนึ่งขึ้นอยู่กับการเซต BC  ดู Figure 4-3

   ในกรณีของคำสั่งที่ส่งให้ all-channel operation ไปหยุดพัก, เวลาที่หยุดจะแปรผันขึ้นอยู่กับ channel นั้นๆ. ดังที่ DS ถูกเซตเมื่อชาแนลทั้งหมดหยุด, มันก็สามารถยืนยันได้ว่าชาแนลทั้งหมดได้หยุดลง. ดู Figure 4-3.

    ถึงแม้ว่าคำสั่งนี้ออกจาก CPU, การ transfer อาจจะไม่ถูกส่งไปหยุดพัก และอาจจะเสร็จการ transfer โดยสมบูรณ์แทน เนื่องจากปัจจัยอย่างเช่น transfer mode (Burst/Block/Demand) และ transfer status (จำนวนของการ transfers ที่กระทำ, เวลาที่ออกคำสั่งส่งให้การทำงานไปหยุดพัก). ถ้า transfer error เกิดขึ้นก่อนที่การ transfer จะหยุด, ทำให้ error stop มีผลต่อการ transfer อีกด้วย

(http://i.imgur.com/0YTtJdb.png)

แปลไปแปลมาร้อนชักจะแปรไม่ออกและดูฟุตบอลบ้าง เลยขาดช่วงขาดตอนไป เริ่มจะจับต้นชนปลายไม่ถูก กรุณาตรวจสอบความถูกต้องโดยการดู manual ภาษาอังกฤษเปรียบเทียบไปด้วยก็ดีครับ  ;D

Title: Re: MF9BF506N DMAC
Post by: tha on March 24, 2015, 05:32:24 AM
9. Pause state
   SS ถูกอ่านจาก CPU เพื่อยืนยันการหยุดพักของการ transfer. The SS ของ a channel ใน Pause state คือ "111". ขณะที่ใน state นี้, มันไม่สามารถถูกเคลียร์จาก CPU.

    แม้แต่ในระหว่างการหยุดพัก, the transfer content ไม่สามารถถูกระบุหรือเปลี่ยน (การเขียน DMACSA, DMACDA, DMACA[29:0] or DMACB[31:1]). ยิ่งกว่านั้นเมื่อ a channel ใน Pause state ถูกสั่งให้หยุดพัก, มันก็ยังคงอยู่ใน Pause state ต่อไป
Title: Re: MF9BF506N DMAC
Post by: tha on March 26, 2015, 04:31:43 AM
10. Pause state / Cancellation of transfer pause
    ถ้าคำสั่งให้เปิดใช้งาน individual-channel operation ถูกส่งไปถึง a channel ที่อยู่ใน Pause state ก่อนแล้วเนื่องจากคำสั่งที่ส่งให้ individual-channel operation ไปหยุดพัก, channel นั้นจะกลับคืนสู่ Transfer state. ถ้าคำสั่งให้เปิดใช้งาน all-channel operation ถูกส่งไปถึง channels ที่อยู่ใน Pause state ก่อนแล้วเนื่องจากคำสั่งที่ส่งให้ all-channel operation ไปหยุดพัก, channel เหล่านั้นจะกลับคืนสู่ Transfer state ถ้า the pause instructions ของทั้งคู่ถูกสั่งไว้ก่อนแล้่ว, ออกคำสั่งนี้จะยกเลิก  the pause instructions ของทั้งคู่นั้น

  หลังจากคำสั่งนี้, SS[2:0] ถูกเคลียร์เป็น "000" โดยทาง DMAC.

    ถ้าคำสั่งให้เปิดใช้งาน individual-channel operation และ  ถ้าคำสั่งให้เปิดใช้งาน all-channel operation ถุกออกมาใน Pause state, มันจะสั่งให้การหยุดพักถูกยกเลิกไป ถ้ามันถูกออกมาใน Disable state, ต้องเอาใจใส่ระมัดระวัง, เพราะมันอาจสั่งการ transfer ใหม่ให้สตาร์ทขึ้นมาได้. ดู Step 11 ใน the software procedure.

   รูปที่ 4-3 แสดงตัวอย่างของกรณีที่คำสั่งที่ส่ง all-channel operation ไปหยุดพัก. การอธิบายของรูปเป็นดังต่อไปนี้

   ณ ที่เริ่มแรก, ชาแนลทั้งสาม, ที่ชื่อว่า ch.0, ch.1 และ ch.2, กระทำการ transfer operations ของมันใน Block transfer mode. ch.2 สำเร็จการ transfer ของมันโดยสมบรณ์, เคลื่อนไปสู่ Disable state และเซต SS=101. จากนั้น, ch.0 และ ch.1 กระทำการ transfers สลับกันไป

   ถ้าคำสั่งที่ส่ง all-channel operation ไปหยุดพักถูกออกมาจาก CPU ที่จุดนี้, ใช้การทำงานดังต่อไปนี้. ตามที่ ch.0 อยู่ภายใต้เวลา Transfer Gap, มันเคลื่อนไปสู่ Pause state โดยทันทีและเซต SS=111. ตามที่ ch.1 อยู่ในตอนกลางของ transfer operation, มันกระทำการ transfer จนกระทั่งถึงเวลาของ Transfer Gap ถัดไป, และจากนั้นเคลื่อนไปสู่ Pause state และเซต SS=111. ตามที่ ch.2 อยู่ใน Disable state, มันยังคงอยู่ใน Disable state ปราศจากการเปลี่ยน SS. DS ถูกเซต, เมื่อชาแนลทั้งหมดหยุดการทำงานของมัน

  ต่อไป,  ถ้าคำสั่งให้เปิดใช้งาน all-channel operation (คำสั่งที่ยกเลิกการหยุดพัก) ถูกออกมาจาก CPU,  ใช้การทำงานดังต่อไปนี้. ch.0 และ ch.1 กลับคืนสู่ Transfer state และเคลียร์ SS[2:0] เป็น "000". ตามที่ ch.2 อยู่ใน Disable state (DE=1, EB=0), มันยังคงอยู่ใน state นั้นโดยปราศจากการสตาร์ทการทำงาน. เพราะการหยุดพักของชาแนลทั้งหมดได้ถูกยกเลิกแล้ว, DS ถูกรีเซต.
Title: Re: MF9BF506N DMAC
Post by: tha on March 31, 2015, 06:05:52 AM
11. Operation in Disable state
   channel หนึ่งใน Disable state ยังคงอยู่ใน the Disable state, เว้นแต่มีเงื่อนใขอย่างเช่น DE=1, DH=0000, EB=1, และ PB=0 ถูกสร้างขึ้น. ถึงแม้ว่าใน 1-2 ของ the software procedure, DE ถูกเซตจากเงื่อนใขที่ DE=0 และ EB=0, และจากนั้น, EB ถูกเซต, มันไม่มีปัญหาที่เซต EB ก่อน DE. DE สามารถถูกเซตหลังสุดหลังจาก the transfer settings ทั้งหมดของหลายชาแนลที่ทำให้เกิดการ transfer นั้นเสร็จสมบรูณ์ ในกรณีนี้, คำสั่งสามารถถูกออกมาเพื่อยอมให้ the multiple channels ที่ทำให้เกิดการ transfer สตาร์ท transfer operations ของมันขึ้นพร้อมกัน. ถ้าคำสั่งเพื่อสตาร์ทการ transfer ขึ้นพร้อมกันเช่นนี้ถูกออกมา, DMAC เลือก the channels ซึ่งการ transfers ถูกสตาร์ท, ตามการเซตของ PR setting (PR สามารถถูกเซตหรือเปลี่ยน, ได้เพียงเมื่อ all-channel operation ถูกปิดการใช้งาน).

   ถ้าคำสั่งปิดการใช้งาน individual-channel operation, คำสั่งที่ส่งให้ individual-channel operation ไปหยุดพัก, คำสั่งปิดการใช้งาน all-channel operation หรือคำสั่งที่ส่งให้ all-channel operation ไปหยุดพักถูกออกมาไปถึง channel หนึ่งใน Disable state, มีเพียงการเซตของ DE, DH, EB และ PB ที่ถูกเปลี่ยน, แต่สภาวะของ DE=1, DH=0000, EB=1 and PB=0 ไม่ถูกสร้างขึ้น. ดังนั้น, ชาแนลนั้นจะไม่ทำอะไรและไม่เปลี่ยน SS. ถ้าคำสั่งที่ส่งให้ all-channel operation ไปหยุดพักถูกออกมาจาก CPU ไปถึง channel หนึ่งใน Disable state, ตามที่แสดงในตัวอย่างของ ch.2 operation ในรูปที่ 4-3, ที่ channel ไม่เปลี่ยนสถานะของมันโดยที่ SS[2:0] แสดงการเสร็จสมบรุณ์ของการ transfer ก่อนหน้า.

  ถ้าคำสั่งที่ส่งให้ individual- หรือ all-channel operation ไปหยุดพักถูกออกมาไปถึงชาแนลหนึ่งใน Disable state, มันอาจจะส่งใน Disable state ด้วย DE=1, EB=1, (DH=0000 or PB=1). ถึงแม้ว่าค่าของบิตใน state นี้จะเหมือนกันตาม DE, EB, DH and PB, มันสามารถถูกทำให้แตกต่างเป็นพิเศษเพราะว่า SS[2:0] มีค่าที่แตกต่าง. Figure 4-4 แสดงตัวอย่างเช่นนี้.

(http://i.imgur.com/vqJ4EuC.png)

  ชาแนลที่แน่นอนหนึ่งกำลังกระทำการ transfer operation. CPU ออกคำสั่งที่ส่งให้ individual-channel operation ไปหยุดพักไปที่ชาแนลนั้น. คำสั่งถูกออกมาหลังจากการ transfer เสร็จแล้วและมันเคลื่อนไปสู่ Disable state (DE=1, DH=0000, EB=0, PB=0). ปรากฏการณ์นี้สามารถเกิดขึ้นได้, เพราะว่าชาแนลที่กำลังกระทำการ transfer operation เปลี่ยนสถานะของมันนอกเหนือความตั้งใจของ CPU. ในกรณีนี้, ค่าบิตของชาแนลนั้นเปลี่ยนไปสู่ (DE=1, DH=0000, EB=1, PB=1) เนื่องจากคำสั่งจาก CPU, แต่ SS[2:0] ยังคงr "101", ค่าที่เซตขึ้นอยู่กับการเสร็จสมบรูณ์. ถ้าการทำงานถูกหยุดลงโดยคำสั่ง pause, SS[2:0] จะเป็น "111"; ดังนั้น, มันอาจเป็นไปได้ที่จะทำให้แตกต่างระหว่าง pause state และสถานะในที่ซึ่งการ transfer ถูกทำให้เสร็จสมบรูณ์แล้ว. ควรจดจำไว้ว่าถ้าคำสั่งเพื่อยกเลิกการหยุดพักถูกออกมาโดยปราศจากการเช็คสถานะของชาแนลโดย SS[2:0], การ transfer ใหม่จะสตาร์ทขึ้นโดนไม่ได้ตั้งใจ, ดังแสดงใน Figure 4-4.
Title: Re: MF9BF506N DMAC
Post by: tha on April 16, 2015, 09:30:11 AM
Additional Matter 1(เพิ่มเติมเรื่องที่ 1)
  ตามที่ ST ถูกเคลียร์ในเวลาที่การ transfer เสร็จสมบรูณ์, การอ่านค่าของ ST เป็น "0" หลังจากการ transfer เสร็จสมบูรณ์. ในกรณีของ software transfer, ควรจดจำไว้ว่า "1" ต้องถูกเขียนไปยัง ST เสมอ, โดยไม่คำนึงถึงค่าที่อ่านได้ของมัน
Title: Re: MF9BF506N DMAC
Post by: tha on April 17, 2015, 05:39:08 AM
Additional Matter 2
   คำสั่งเปิดใช้งาน individual-channel operation ไม่สามารถถูกออกมาในระหว่างคาบเวลาช่วงหลังจากคำสั่งเปิดใช้งาน individual-channel operation ก่อนหน้าออกคำสั่งสตาร์ทของการ transfer และก่อนที่การ transfer เสร็จสมบรูณ์ได้ถูกยืนยัน. เป็นเพราะว่าชาแนลที่ถูกควบคุมอาจเปลี่ยนสถานะของมันนอกเหนือจากความตั้งใจของ CPU และคำสั่งสตาร์ทการ transfer ใหม่อาจถูกออกมาเมื่อ DMAC ได้เคลื่อนไปสู่ Disable state (EB=0). แม้ว่าค่า SS[2:0] ยืนยันว่าชาแนลที่ถูกควบคุมอยู่ใน Transfer state, ชาแนลที่ถูกควบคุมนั้นอาจเคลื่อนไปสู่ Disable state ในระหว่างคาบเวลาระหว่างจุดนั้นและการดำเนินการเขียน
Title: Re: MF9BF506N DMAC
Post by: tha on April 21, 2015, 05:07:05 AM
Additional Matter 3
   ค่า DE และ DH สามารถถูกเขียนใหม่ได้เพียงจาก CPU และ registers เหล่านี้ไม่เคยถูกเคลียร์จาก DMAC. ดังนั้น, มันไม่มีปัญหาที่เขียน DE=1 และ DH=0000 ในระหว่างการ transfer operation.

   DH ไม่ถูกเคลียร์, ถ้าคำสั่งปิดการใช้งาน individual-channel operation ถูกออกมาไปยังชาแนลหนึ่งใน all-channel Pause state (DE=1, DH=0000, EB=1, PB=0).หลังจากออกคำสั่ง, ชาแนลนั้นก็เคลื่อนไปสู่ Disable state (DE=1, DH=0000, EB=0, PB=0). เพื่อสตาร์ทการ transfer ใหม่ของชาแนลนั้น, เขียน DE=1 และ DH=0000. นี่แสดงว่าการยกเลิกการหยุดพัก(pause) ของ all-channel operation ถูกต้องการเพื่อที่จะสตาร์ทการ transfer ใหม่ของเฉพาะแต่ละชาแนล (individual channel).
Title: Re: MF9BF506N DMAC
Post by: tha on April 22, 2015, 03:47:31 AM
Additional Matter 4
  ค่าSS[2:0] ถูกเซตจาก DMAC ในเวลาที่การ transfer หนึ่งเสร็จสมบูรณ์และมันไม่เคยถูกเขียนใหม่จาก DMAC ตราบเท่าที่มันอยู่ใน Disable state. ถึงแม้ว่าค่า SS[2:0] ไม่ถูกเคลียร์, การ transfer ถัดไปก็สามารถถูกสตาร์ทได้. อย่างไรก็ตาม, ถ้ามันเคลื่อนไปสู่ Transfer state, ค่า SS[2:0]อาจถูกเคลียร์จาก DMAC (หรืออาจไม่ถูกเคลียร์). เมื่อ interrupt หนึ่งจาก DMAC ถูกใช้, ควรจดจำไว้ว่า interrupt signal ถูกถอดการครองสิทธิ์ที่เวลาซึ่งไม่ได้ตั้งใจโดย CPU, ถ้ามันเคลื่อนไปสู่ Transfer state โดยปราสจากการเคลียร์ SS[2:0]
Title: Re: MF9BF506N DMAC
Post by: tha on April 23, 2015, 04:00:54 AM
4.3. DMAC Operation and Control Procedure for Hardware (EM=0) Transfer
  ในส่วนนี้อธิบาย DMAC operation and control procedure for hardware (EM=0) transfer.

    (http://i.imgur.com/32cRNC7.png)

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

  บางส่วนของการอธิบายข้างล่างที่กล่าวว่า "ดู the software transfer procedure". หมายถึงว่าที่ซึ่งการควบคุมที่เหมือนกันกับใน the software transfer procedure ถูกใช้, ไม่มีการอ้างถึงเป็นพิเศษถูกต้องการ ; ดังนั้น, การอธิบายที่ซ้ำซากจะถูกข้ามไป ในตัวอย่างนี้ การอธิบายนี้ทึกทักเอาว่า EM=0 ถูกเซต
Title: Re: MF9BF506N DMAC
Post by: tha on April 23, 2015, 08:08:19 AM
 Description of Each State(การอธิบายของแต่ละสถานะ)

   Disable state
   ดูการอธิบายของ Control Procedure ใน "4.2 DMAC Operation and Control Procedure for Software Transfer".

   Wait-1st-trigger state
   ในสถานะนี้, channel ที่ถูกควบคุมถูกเปิดใช้งานเพื่อกระทำการ transfer. channel ในสถานะนี้คอยเพื่อ transfer request แรกจาก a Peripheral ถูกถือสิทธ์. มันเปลี่ยนสถานะของมันในเวลาที่มีคำสั่งจาก CPU ได้อีกด้วย.

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

   Pause state
   ดูการอธิบายของ Control Procedure ใน "4.2 DMAC Operation and Control Procedure for Software Transfer".
Title: Re: MF9BF506N DMAC
Post by: wozniak on April 23, 2015, 08:30:22 AM
สุดยอดเลยครับ สำหรับการแปลข้อมูล ไม่ต้องหาจากที่ไหน
ยอดๆๆๆ
ช่วงนี้ มีของดีๆ เยอะเลย
Title: Re: MF9BF506N DMAC
Post by: tha on April 23, 2015, 09:03:23 AM
นอกจากนั่งสมาธิ เดินจงกรม แล้วไม่ได้ทำอะไรเป็นชิ้นเป็นอัน ก็เลยหาอะไรทำยามว่างครับ วันนี้เย็นหน่อยเลยได้ 2 ตอน
Title: Re: MF9BF506N DMAC
Post by: tha on April 24, 2015, 08:24:24 AM
 Explanation of Control Procedure(คำอธิบายของขบวนการควบคุม)

1. Disable state / Preparation for transfer(สถานะปิดการใช้งาน / เตรียมการสำหรับการ transfer)
   ดู Step 1 ใน the software transfer procedure.

   ข้อจำกัดดังต่อไปนี้นำไปใช้กับ hardware transfer. ตัดสินใจล่วงหน้าว่าด้วย interrupt signal ของ Peripheral ที่ถูกใช้เป็น transfer request signal ไปยัง DMAC โดยใช้ the interrupt controller block (ดู the section on the functional explanation). เซต ST=0 และระบุ transfer request ของ Peripheral ที่ถูกดำเนินการที่ channel ที่จะกระทำการ transfer, โดย IS ในเวลาเดียวกัน. หลายชาแนลไม่สามารถดำเนินการ transfer request ชอง Peripheral เดียวกันได้. ในกรณีของ Demand transfer mode, เซต BC=0. ส่วน(section) นี้อธิบายการทำงานเมื่อ EM=0 ถูกเซต
Title: Re: MF9BF506N DMAC
Post by: tha on April 24, 2015, 08:30:57 AM
2. Disable state => Wait-1st-trigger state / Transfer enabled
   คำสั่งเปิดการใช้งาน individual-channel operation ถูกออกมาจาก CPU. เมื่อ DE=1, EB=1, DH=0000 และ PB=0 ถูกเซต, the channel ที่ถูกควบคุมเคลื่อนไปสู่ Wait-1st-trigger state.
Title: Re: MF9BF506N DMAC
Post by: tha on April 24, 2015, 08:38:25 AM
3. Wait-1st-trigger state / Start of transfer
  The channel ใน Wait-1st-trigger state กำลังคอยเพื่อให้ the transfer request signal ถูกถือสิทธิ์จาก the Peripheral หรือเพื่อให้มีคำสั่งจาก CPU. เมื่อ the first transfer request signal ถูกถือสิทธิ์, มันเคลื่อนไปสู่ Transfer state
Title: Re: MF9BF506N DMAC
Post by: tha on April 25, 2015, 10:03:00 AM
4. Transfer state
    ดู Step 3 ใน the software transfer procedure.

    ในกรณีของ hardware transfer, channel หนึ่งใน Transfer state กระทำการ transfer operation โดย the transfer request signal จาก a Peripheral, ตามที่อธิบายใน Sections 3.3 and 3.4. ในแต่ละ mode, จับคู่จำนวนของ transfer requests จาก the Peripheral ด้วยจำนวนของ transfer requests ที่ต้องการโดย DMAC. ข้างล่างนี้คือคำอธิบายการทำงานเมื่อจำนวนของ transfer requests มีมากกว่าหรือต่ำกว่าความต้องการในแต่ละ operation mode.

   Figure 4-6 แสดงกรณีของ Demand transfer. ในกรณีของ Demand transfer, จำนวนของ transfer requests ที่ต้องการให้เสร็จการ transfer คือ TC+1. แม้ว่าจำนวนของ transfer requests มีไปมากกว่าหรือต่ำกว่าความต้องการ, CPU ก็ไม่มีการไปแทรกแซง (Example 1 in Figure 4-6).

   ถ้าจำนวนของtransfer requests ที่เกิดจาก the Peripheral มีเกินกว่าจำนวนของการ transfer ที่เซตที่ DMAC, DMAC เคลื่อนไปสู่ Disable state หลังจากเสร็จสิ้นตามจำนวนการ transfers ที่ระบุ. ใน Disable state, ไม่มีการกระทำการ transfers อีกต่อไป. ตามที่ transfer request signals ที่เกินนั้นไม่ถูกเคลียร์จาก DMAC, สถานะการถือสทธิ์ยังคงอยู่ต่อไปอีกด้วย (Example 2 in Figure 4-6).

  ถ้าจำนวนของ transfer requests ที่เกิดจาก the Peripheral มีน้อยกว่าจำนวนของการ transfer ที่เซตที่ DMAC, DMAC คอยจำนวนของ transfer requests ที่เหลืออยู่ใน Transfer state (Example 3 in Figure 4-6).

  สมมุตว่า DMAC's transfer processing อาจจะช้าเกินไปในการตรวจจับการหยุดพักเป็นช่วงๆของ transfer requests จาก Peripheral. ในกรณีของ Demand transfer, the transfer request signal ยังคงถือสิทธิ์; ดังนั้น, มากที่สุดเท่าที่ TC+1 ของการ transfers สามารถถูกกระทำ (Example 4 in Figure 4-6)

(http://i.imgur.com/79ESRNE.png)
Title: Re: MF9BF506N DMAC
Post by: tha on April 27, 2015, 04:24:04 AM
  Figure 4-7 แสดงกรณีของ Block transfer. ในกรณีของ Block transfer, จำนวนของ transfer requests ที่ต้องการให้เสร็จการ transfer คือ TC+1. แม้ว่าจำนวนของ transfer requests มีไปมากกว่าหรือต่ำกว่าความต้องการ, CPU ก็ไม่มีการไปแทรกแซง (Example 1 in Figure 4-7).

(http://i.imgur.com/z7JwZVo.png)

  ถ้าจำนวนของ transfer requests ที่เกิดจาก the Peripheral มีเกินกว่าจำนวนของการ transfer ที่เซตที่ DMAC, DMAC เคลื่อนไปสู่ Disable state หลังจากเสร็จสิ้นตามจำนวนการ transfers ที่ระบุ. ใน Disable state, ไม่มีการกระทำการ transfers อีกต่อไป. ตามที่ transfer request signals ที่เกินนั้นไม่ถูกเคลียร์จาก DMAC, สถานะการถือสทธิ์ยังคงอยู่ต่อไป, ในกรณีนี้, ถอดการถือสิทธิ์ the transfer request signal จาก CPU (Example 2 in Figure 4-7).

   ถ้าจำนวนของ transfer requests ที่เกิดจาก the Peripheral มีน้อยกว่าจำนวนของการ transfer ที่เซตที่ DMAC, DMAC คอยจำนวนของ transfer requests ที่เหลืออยู่ใน Transfer state (Example 3 in Figure 4-7).

  สมมุตว่า DMAC's transfer processing อาจจะช้าเกินไปในการตรวจจับการเกิดการหยุดพักเป็นช่วงๆของ transfer requests จาก Peripheral. ในกรณีของ Block transfer, ถ้า DMAC's transfer processing ถูกทำให้ล่าช้าจาก the transfer request จาก the Peripheral, ขอบขาขึ้นของ transfer request signal ถัดไปในระหว่างการ transfer operation ถูกละเลย.  the transfer request signal ที่ถือสิทธิ์ในระหว่างการ transfer operation จะถูกเคลียร์จาก DMAC อีกด้วย. ดังนั้น, DMAC คอย transfer requests ที่เหลือใน Transfer state (Example 4 in Figure 4-7).

  ในกรณีของ Burst transfer, ทั้งหมดของ (BC+1) X (TC+1) ของการ transfers ถูกกระทำเมื่อมันเข้าถึง the system bus ได้หลังจากได้รับ transfer request แรก. จำนวนของ transfer requests ที่ต้องการจาก the Peripheral คือหนึ่งแรกเท่านั้น. ถ้าจำนวนของ transfer request signals เกิดขึ้นเกินกว่าที่ต้องการ, มันจะถูกละเลยใน Disable state, เหมือนกับ Block transfer.
Title: Re: MF9BF506N DMAC
Post by: tha on May 01, 2015, 05:33:02 AM
5. Transfer state => Disable state / Successful completion of transfer
    ดู Step 4 in the software transfer procedure.

6. Transfer state => Disable state / Transfer error stop
   ดู Step 5 in the software transfer procedure.

7. Transfer state => Disable state / End of Peripheral stop request
   The channel ใน Transfer state ระงับ transfer processing ของมัน, ถ้า the transfer stop request signal ถูกถือสิทธิ์จาก the Peripheral. มันจะเคลียร์ EB, PB และ ST และเคลื่อนไปสู่ Disable state. มันจะเซต "010" ไปยัง SS[2:0] และแจ้งให้ทราบถึง the error stop นั้น. ถ้า interrupts ถูกเปิดการใช้งานอยู่แล้วโดย EI, an unsuccessful transfer completion interrupt จะเกิดขึ้น. BC, TC, DMACSA and DMACDA ซึ่งการโหลดซ้ำ( reload )ไม่ได้ถูกระบุไว้ก่อนหน้าจะยึดค่าที่เซตในระหว่างการระงับการ transfer.ต้องเอาใจใส่ต่อค่า SS[2:0], ซึ่งจะเหมือนกันกับ the stop request จาก software.
Title: Re: MF9BF506N DMAC
Post by: tha on May 05, 2015, 05:26:54 AM
8. Transfer state, Pause state => Disable state / Forced termination of transfer
   ดู Step 6 in the software transfer procedure.

9. Disable state / Post-transfer processing
   ดู Step 7 in the software transfer procedure.

   ปกติแล้ว, ในกรณีของ stop request จาก Peripherals, บังคับให้สิ้นสุดจาก software และ transfer error stop, the transfer request signal ยังคงถือสิทธิ์, เพราะว่าจำนวนของการ transfers ที่ดำเนินการมีน้อยก่วาจำนวนของ transfer requests จาก the Peripheral. ออกคำสั่งจาก CPU, the Peripheral ถอดการถือสิทธิ์ the transfer request signal. ในกรณีของ stop request จาก Peripherals, the transfer request signal ถูกบังไว้ตราบเท่าที่ the stop request signal ถูกถือสิทธิ์. ยังถอดการถือสิทธิ์ the transfer stop request signal อีกด้วย

   ถึงแม้ว่า DMAC ได้สำเร็จการ transfer ตามจำนวนที่ระบุโดยสมบรูณ์แล้ว, the transfer request signal อาจยังคงถ์อสิทธิ์หรืออาจถูกถือสิทธิ์ซ้ำ, ขึ้นอยู่กับการเซตของ Peripheral. ต้องเอาใจใส่ถึงความเป็นไปได้ที่สิ่งนี้อาจจะมีผลต่อการ transfer ถัดไป.

10. Transfer state, Pause state / Transfer pause
  ดู Step 8 in the software transfer procedure.

11. Pause state
  ดู Step 9 in the software transfer procedure.

  The channel ใน Pause state ไม่กระทำการ transfer, ถึงแม้ว่า the transfer request signal จาก the Peripheral ถูกถือสิทธิ์. มันไม่เคลียร์ the transfer request signal เช่นกัน.
 
Title: Re: MF9BF506N DMAC
Post by: tha on May 07, 2015, 05:51:36 AM
12. Pause state / Cancellation of transfer pause
   See Step 10 in the software transfer procedure.

   เมื่อคำสั่งยอเลิกการหยุดพักถูกออกมาในขณะที่อยู่ใน Pause state, มันกลับไปสู่ Transfer state. ถ้า the transfer request signal ถูกถือสิทธิ์ใน Pause state ก่อนหน้านั้น, การทำงานจะแปรผันตามที่แสดงข้างล่างนี้, ขึ้นอยู่กับ the transfer mode.

  ในกรณีของ Demand transfer mode, the transfer request signal ยังคงถือสิทธิ์จาก the Pause state. ดังนั้น, การ transfer ถูกดำเนินต่อไปใหม่เมื่อ DMAC กลับคืนสู่ Transfer state, และ the transfer request signal ถูกเคลียร์ตามปกติ. ดู Figure 4-8.

(http://i.imgur.com/Exh3Jm7.png)

  ในกรณีของ Block transfer mode, the transfer request signal ยังคงถือสิทธิ์. ยิ่งไปกว่านั้นเมื่อมันกลับคืนสู่ Transfer state, ขอบขาขึ้นของ the transfer request signal ไม่ถูกตรวจพบ, และการ the transfer ไม่ได้เริ่มใหม่. ดังนั้น, the transfer request ถูกเพิกเฉยในระหว่าง Pause state. อีกทั้ง, the transfer request signal ไม่ถูกเคลียร์จาก DMAC อีกด้วย. เพื่อเริ่มการ transfer ใหม่ซึ่งถูกส่งไปหยุดพักก่อนแล้ว, คำสั่งจาก CPU ให้ the Peripheral ถอนการถือสิทธิ์ the transfer request signal หลังจากคำสั่งยกเลิกการหยุดพักถูกออกไปสู่ DMAC.หลังจากนั้น, การ transfer จะเริ่มใหม่เมื่อ transfer request ถัดไปถูกทำให้เกิดขึ้นจาก the Peripheral. ในกรณีนี้, ต้องระมัดระวังเอาใจใส่ความแตกต่างระหว่างจำนวนของ transfer requests output จาก the Peripheral และจำนวนของ transfer requests ที่ได้รับโดย DMAC. ดู Figure 4-9.

(http://i.imgur.com/Ki3tokW.png)
Title: Re: MF9BF506N DMAC
Post by: tha on May 10, 2015, 05:17:16 AM
13. Operation in Disable state and Wait-1st-trigger state
  ดู Step 11 in the software transfer procedure.

   ถ้า the transfer request signal ไม่ถูกถือสิทธิ์ไปถึงชาแนลใน Disable state, ค่ารีจีสเตอร์ที่ระบุในการ transfer (the specifications of the transfer content) สามารถถูกเปลี่ยนได้อย่างอิสระ (เขียนใหม่ไปยัง registers DMACSA, DMACDA, DMACA[29:0], and DMACB).

  ถ้า the transfer request signal ถูกถือสิทธิ์หรืออาจจะถูกถือสิทธิ์ไปถึง the channel ใน Disable state, ค่าที่ระบุของ IS, ST และ MS ในรีจีสเตอร์ทั้งหลายที่ใช้ในการ transfer (the transfer content) ไม่สามารถถูกเปลี่ยนได้. ถ้าพยายามทำการเปลี่ยนการเซตเหล่านี้, DMAC อาจจะกระทำพฤติกรรมที่ไม่คาดฝัน. เพื่อเปลี่ยนการเซตของ IS, ST และ MS, สิ่งแรกคือเคลียร์ the transfer request signal ที่ไปยังทั้งคู่ของ the Peripherals (ใช้ก่อนและหลังการเปลี่ยน) จาก CPU, และจากนั้นเปลี่ยนการเซตในขณะ the transfer request signal ถูกถอนการถือสิทธิ์เสมอ. ดู Figure 4-10.

(http://i.imgur.com/NUbWucV.png)

  ค่ารีจีสเตอร์ที่ระบุในการ transfer (the specifications of the transfer content) ไม่สามารถถูกเปลี่ยนไปยัง the channel ใน Wait-1st-trigger state จาก CPU

  ถ้า the transfer request signal ไม่ถูกถือสิทธิ์ไปยัง the channel ใน Wait-1st-trigger state, มันจะเคลี่ยนไปสู่ Disable state เมื่อ CPU ออกคำสั่งปิดการใช้งาน individual- หรือ all-channel operation หรือคำสั่งที่ส่งให้ individual- or all-channel operation ไปหยุดพัก. ในกรณีนี้, มันถูกพิจารณาได้ว่า the enabled transfer ได้ถูกยกเลิกแล้ว. ในกรณีนี้, SS ไม่ถูกเปลี่ยน

  ถ้า the transfer request signal อาจเป็นไปได้ที่จะถูกถือสิทธิ์ไปยัง the channel ใน Wait-1st-trigger state, ควรจดจำไว้ว่า DMAC ได้ถูกสตาร์ทแล้วหรือเสร็จสิ้นการ transfer ก่อนที่จะพยายามยกเลิก the enabled transfer จาก CPU.

  ใน Disable state, DMAC ไม่สตาร์ทการ the transfer หรือเคลียร์ the transfer request, ถึงแม้ว่า the transfer request signal ถูกถือสิทธิ์. ถ้ามันเคลื่อนไปสู่ Wait-1st-trigger state โดยคำสั่งจาก CPU ในขณะที่ the transfer request signal ถูกถือสิทธิ์, จะใช้การทำงานดังต่อไปนี้ (เพียงแต่เมื่อการเซตของ IS, ST และ MS ไม่ได้ตั้งใจที่จะถูกเปลี่ยนเท่านั้น, ตามที่อธิบายไปก่อนหน้านี้).

  ในกรณีของ Demand transfer mode, DMAC เคลื่อนไปสู่ Transfer state โดยทันทีและสตาร์ท the transfer, เพราะว่า the transfer request signal ยังคงถือสิทธิ์อยู่. The transfer request signal ถูกเคลียร์จาก DMAC ตามปกติ. ดู Figure 4-11.

(http://i.imgur.com/AKkXbR6.png)

  ในกรณีของ Block transfer mode, the transfer request signal ยังคงถือสิทธิ์. แม้เมื่อมันเคลื่อนไปสู่ Wait-1st-trigger state, ขอบขาขึ้นของ the transfer request signal ไม่ถูกตรวจพบ, และ the transfer ไม่ถูกเริ่มใหม่. ดังนั้น, the transfer request จะถูกเพิกเฉยในระหว่าง Disable state. อีกทั้ง, the transfer request signal ไม่ถูกเคลียร์จาก DMAC อีกด้วย. เพื่อเริ่ม the transfer ใหม่, ออกคำสั่งให้ DMAC เคลื่อนไปสู่ Wait-1st-trigger state, และจากนั้นออกคำสั่งจาก CPU ให้ the Peripheral ถอนการถือสิทธิ์ the transfer request signal. หลังจากนั้น, มันจะเคลื่อนไปสู่ Transfer state และ the transfer จะถูกเริ่มใหม่เมื่อ transfer request ถัดไปถูกทำให้เกิดขึ้นจาก the Peripheral. ในกรณีนี้, ควรระมัดระวังเอาใจใส่ในความแตกต่างระหว่างจำนวนของ transfer requests output จาก the Peripheral และจำนวนของ transfer requests ที่ได้รับโดย DMAC. ดู Figure 4-12.

(http://i.imgur.com/2kjpf8N.png)
Title: Re: MF9BF506N DMAC
Post by: tha on May 11, 2015, 04:52:39 AM
Additional Matter 1 (เพิ่มเติมเรื่อง 1)
   See Additional Matter 1 in " 4.2. DMAC Operation and Control Procedure for Software Transfer".

   ในกรณีของ hardware transfer, เขียน "0" ไปยัง ST เสมอ.

Additional Matter 2
   See Additional Matter 2 in " 4.2. DMAC Operation and Control Procedure for Software Transfer".

Additional Matter 3
   See Additional Matter 3 in "4.2. DMAC Operation and Control Procedure for Software Transfer".

Additional Matter 4
   See Additional Matter 4 in "4.2.DMAC Operation and Control Procedure for Software Transfer".

Additional Matter 5
   ถ้า the transfer request signal (interrupt signal) จาก the Peripheral ต้องการที่จะถูกถอนการถือสิทธิ์, ใช้วิธีการดังต่อไปนี้. โดยปกติ, the interrupt signal จาก the Peripheral คือ the interrupt factor flag ถูกบัง (logic AND) โดย the interrupt enable flag. The interrupt signal สามารถถูกถอนการถือสิทธิ์โดยการรีเซต flag ใด flag หนึ่ง. เมื่อ the interrupt enable flag ถูกรีเซตและจากนั้นเซต, ขอบขาขึ้นเกิดขึ้นกับ the interrupt signal. ขบวนการต่อไปนี้สามารถแจ้ง DMAC ให้ทราบเกี่ยวกับ the transfer request สำหรับ Block transfer อีกครั้ง. สำหรับรายละเอียด, เช็คคู่มือสำหรับแต่ละ Peripheral.
Title: Re: MF9BF506N DMAC
Post by: tha on May 12, 2015, 02:03:45 AM
4.4. DMAC Operation and Control Procedure for Hardware (EM=1) Transfer
  ในส่วนนี้อธิบาย DMAC operation and control procedure for hardware (EM=1) transfer.

(http://i.imgur.com/TnEJUw0.png)

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

  EM (Enable bit clear mask) คือบิตที่บัง EB เคลียร์ในเวลาที่เสร็จสมบรูณ์การ transfer ของชาแนลที่ถูกควบคุม. EM=1 เปิดการใช้งานขบวนการการ transfer ที่เหมือนกันจะถูกทำซ้ำโดยปราศจากการออกคำสั่งจาก CPU.

 Description of Each State

   Disable state
      See the hardware transfer (EM=0) procedure
.
   Wait-1st-trigger state
      See the hardware transfer (EM=0) procedure.

   Transfer state
       ในสถานะนี้, channel ที่ถูกควบคุมได้รับ transfer request แรกจาก the Peripheral แล้ว. channel ในสถานะนี้กระทำการ transfer operation ตามที่ระบุ. ในกรณีของ EM1, มันเคลื่อนไปสู่ Wait-1st-trigger state,  เมื่อการ transfer operation ทั้งหมดเสร็จสมบรูณ์. มันเปลี่ยนสถานะของมันในเวลาที่มีคำสั่งจาก CPU อีกด้วย

   Pause state
      See the hardware transfer (EM=0) procedure.
Title: Re: MF9BF506N DMAC
Post by: tha on May 14, 2015, 05:49:46 AM
 Explanation of Control Procedure

1. Disable state / Preparation for transfer
   See Step 1 in the hardware transfer (EM=0) procedure.

   เพื่อเซต EM=1, เซตระบุการโหลดซ้ำ (reload specifications) ทั้งหมดของรีจิสเตอร์ที่ใช้ในการ transfer ( the transfer content) (RC, RS, RD) เพื่อที่ป้องกัน data transfer ใน address area ที่ไม่ได้มุ่งหมาย. พร้อมทั้ง, CI ไม่ถูกเซต, เพราะว่าไม่มีความหมาย(ไม่ต้องการ)ทำให้เกิด a successful transfer completion interrupt จาก DMAC. EI ถูกเซตเพื่อทำให้เกิด an unsuccessful transfer completion interrupt จาก DMAC.

2. Disable state => Wait-1st-trigger state / Enabling transfer
   See Step 2 in the hardware transfer (EM=0) procedure.

3. Wait-1st-trigger state / Start of transfer
   See Step 3 in the hardware transfer (EM=0) procedure.

4. Transfer state
   See Step 4 in the hardware transfer (EM=0) procedure

5. Transfer state => Wait-1st-trigger state / Successful completion of transfer
   เมื่อการ transfers เสร็จโดยสมบรูณ์เป็นจำนวนผลคูณที่คำนวนโดย (BC+1) x (TC+1), the channel ใน Transfer state ไม่เคลียร์ EB แต่เคลียร์ PB และ ST และเคลื่อนไปสู่ Wait-1st-trigger. มันเซต SS=101 เพื่อแจ้งให้ทราบถึงการเสร็จสมบรูณ์. ตามที่ CI ไม่ถูกเซต,  successful transfer completion interrupt ไม่ถูกทำให้เกิดขึ้น. ตั้งแต่ RC, RS และ RD ถูกเซต, ค่าที่ระบุของรีจีสเตอร์ที่ใช้ในการ transfer (the specifications of the transfer content) ของ BC, TC, DMACSA and DMACDA ถูกโหลดซ้ำ (reloaded).
Title: Re: MF9BF506N DMAC
Post by: tha on May 15, 2015, 04:23:29 AM
6. Transfer state => Wait-1st-trigger state / Transfer error end
   See Step 6 in the hardware transfer (EM=0) procedure.

   ในกรณีของ EM=1, EB ไม่ถูกเคลียร์ถึงแม้ว่าการ transfer จบลงเนื่องจาก an error. มันเคลียร์ PB และ ST, เคลื่อนไปสู่ Wait-1st-trigger state และคอย transfer request ถัดไป. ดังนั้น, แนะนำว่าไม่ควรใช้ DMA transfer ด้วย EM=1 ใน an address area ในที่ซึ่ง a transfer error อาจจะเกิดขึ้น.

7. Transfer state =>Wait-1st-trigger state /End of Peripheral stop request
   See Step 7 in the hardware transfer (EM=0) procedure.

    ในกรณีของ EM=1, EB ไม่ถูกเคลียร์ถึงแม้ว่า a stop request ออกมาจาก the Peripheral. มันเคลียร์ PB และ ST และเคลื่อนไปสู่ Wait-1st-trigger state. ตั้งแต่ RC, RS and RD ถูกเซต, ค่าที่ระบุของรีจีสเตอร์ที่ใช้ในการ transfer (the specifications of the transfer content) ของ BC, TC, DMACSA and DMACDA ถูกโหลดซ้ำ (reloaded). ตามที่ EI ถูกเซต, an unsuccessful transfer completion interrupt ถูกทำให้เกิดขึ้น.
Title: Re: MF9BF506N DMAC
Post by: tha on May 16, 2015, 03:13:11 AM
8. Wait-1st-trigger state / Post-transfer process
   ในกรณีของ EM=1, EB ไม่ถูกเคลียร์ในเวลาที่การ transfer เสร็จสมบรูณ์. (DE=1, EB=1, DH=0000, PB=0) ถูกเซตและมันเคลื่อนไปสู่ Wait-1st-trigger state. เมื่อ transfer request ถัดไปถูกทำให้เกิดขึ้นจาก the Peripheral, ดังนั้น, การ transfer ถัดไปสตาร์ทขึ้นโดยปราศจากคำสั่งจาก CPU.

   ถ้ามันเคลื่อนไปสู่ Wait-1st-trigger state เนื่องจาก a stop request จาก the Peripheral, an unsuccessful completion interrupt เกิดขึ้นและสถานะนั้นสามารถถูกพิสูทธิ์ว่าจริง. พร้อมทั้ง, the transfer request signal ถูกบังขณะ the stop request signal ถูกถือสิทธิ์อีกด้วย. ถึงแม้ว่า transfer request signal ถัดไปถูกถือสิทธิ์จาก the Peripheral, มันจะไม่ถูกจำได้และ the channel ที่ถูกควบคุมจะยังคงอยู่ใน Wait-1st-trigger state, คอยคำสั่งจาก CPU

   ในกรณีข้างบนนี้, SS ถูกอ่านจาก CPU เพื่อเช็คสถานะของการเสร็สมบรูณ์การ transfer. The interrupt signal ถูกถอนการถือสิทธิ์โดยการเคลียร์ SS จาก CPU. CPU เคลียร์ EB และมันกลับไปสู่ Disable state (การทำงานนี้คือการทำงานที่แสดงใน Step 15 ของ the hardware transfer (EM=1) procedure). The transfer request signal และ the stop request signal จาก the Peripheral ถูกถอนการถือสิทธิ์, ตามที่แสดงใน Step 7 ของ the hardware transfer (EM=0) procedure
Title: Re: MF9BF506N DMAC
Post by: tha on May 19, 2015, 04:40:30 AM
9. Transfer state => Disable state / Completion of transfer by EM=0
   The operation สามารถออกจาก loop ของ Wait-1st-trigger state และ Transfer state โดยการเขียน EM=0 จาก CPU. ที่เวลาเมื่อการ transfer หยุดหลังจากคำสั่ง, EB, ST and PB ถูกเคลียร์และ the Transfer state เปลี่ยนไปสู่ Disable state (DE=1, EB=0, DH=0000, PB=0) เพื่อเสร็จสมบรูณ์การ transfer. ในกรณีนี้, successful transfer completion interrupt ไม่ถูกทำให้เกิดขึ้น, เนื่องจาก CI ไม่ถูกเซต.

10. Transfer state, Pause state => Disable state / Forced termination of transfer
   See Step 8 in the hardware transfer (EM=0) procedure.

  The operation สามารถออกจาก loop ของ Wait-1st-trigger state and Transfer state โดยคำสั่งปิดการใช้งานการทำงาน(an operation disable instruction). เมื่อคำสั่งปิดการใช้งาน individual-channel operation ถูกออกมา, ชาแนลนั้นเคลื่อนไปสู่ Disable state (DE=1, EB=0, DH=0000, PB=0) และหยุดการทำงาน. เมื่อคำสั่งเปิดการใช้งาน all-channel operation ถูกออกมา, มันเคลื่อนไปสู่ Disable state (DE=0, EB=1, DH=0000, PB=0) และหยุดการทำงาน. ในกรณีของคำสั่งปิดการใช้งาน all-channel operation, EB ไม่ถูกเคลียร์เช่นกัน; ดังนั้น, ต้องเอาใจใส่ดูแล.

   เมื่อการทำงานออกจาก Transfer state, an unsuccessful transfer completion interrupt เกิดขึ้นเพราะว่าไม่เสร็จสมบรูณ์เนื่องจากบังคับหยุด. เมื่อมันออกจาก Wait-1st-trigger state, the enabled transfer ถูกยกเลิก (การทำงานนี้คือการทำงานที่แสดงใน Step 15 of the hardware transfer (EM=1) procedure).

11. Disable state / Post-transfer processing
   See Step 9 in the hardware transfer (EM=0) procedure.

12. Transfer state, Pause state / Transfer pause
   See Step 10 in the hardware transfer (EM=0) procedure.

13. Pause state
   See Step 11 in the hardware transfer (EM=0) procedure.

14. Pause state / Cancellation of transfer pause
   See Step 12 in the hardware transfer (EM=0) procedure.

15. Operation in Disable state and Wait-1st-trigger state
   See Step 13 in the hardware transfer (EM=0) procedure.

   ในกรณีของ EM=1, the Transfer state เปลี่ยนโดยตรงไปสู่ Wait-1st-trigger state. ดังนั้น, ค่าที่ระบุของรีจีสเตอร์ที่ใช้ในการ transfer (the specifications of the transfer content) ไม่สามารถถูกเขียนใหม่ในระหว่างการทำงานการ transfer ซ้ำ (การเขียนใหม่ the registers DMACSA, DMACDA, DMACB[31:1] and DMACA[28:0]).
Title: Re: MF9BF506N DMAC
Post by: tha on May 20, 2015, 08:36:56 AM
Additional Matter 1
   See Additional Matter 1 in "4.3. DMAC Operation and Control Procedure for Hardware (EM=0) Transfer".

Additional Matter 2
   See Additional Matter 2 in "4.3. DMAC Operation and Control Procedure for Hardware (EM=0) Transfer.

   ในกรณีของ EM=1, Additional Matter 2 ไม่ได้ใช้, เพราะว่า EB ไม่ถูกเคลียร์ในระหว่าง the transfer operation".

Additional Matter 3
   See Additional Matter 3 in "4.3. DMAC Operation and Control Procedure for Hardware (EM=0) Transfer".

Additional Matter 4
   See Additional Matter 4 in "4.3. DMAC Operation and Control Procedure for Hardware (EM=0) Transfer".

   การอธิบายต่อไปนี้บอกว่าอะไรที่ต้องจดจำเมื่อเซต interrupts จาก DMAC พร้อมด้วย EM=1. ตามที่ชาแนลเป้าหมายไม่ได้เปลี่ยนจาก Wait-1st-trigger state เนื่องจาก an unsuccessful completion interrupt โดย a stop request จาก the Peripheral, the interrupt signal ไม่ถูกถอนการถือสิทธิ์จนกระทั่งมันถูกเคลียร์จาก CPU. ในทำนองเดียวกัน, ตามที่ชาแนลเป้าหมายเคลื่อนไปสู่ Disable state เนื่องจาก an unsuccessful transfer completion interrupt โดย a stop request จาก software, the interrupt signal ไม่ถูกถอนการถือสิทธิ์จนกระทั่งมันถูกเคลียร์จาก CPU. successful transfer completion interrupts และ unsuccessful transfer completion interrupts อื่นๆอาจถูกถอนการถือสิทธิ์ในเวลาที่ไม่ได้ตั้งใจโดย CPU, ถ้าชาแนลนั้นเคลื่อนไปสู่ Transfer state. ดังนั้น, ต้องเอาใจใส่ดูแล.

Additional Matter 5
   See Additional Matter 5 in "4.3. DMAC Operation and Control Procedure for Hardware (EM=0) Transfer"
Title: Re: MF9BF506N DMAC
Post by: tha on May 20, 2015, 08:59:45 AM
เข้าหน้าฝนซะทีค่อยยังชั่วเย็นหน่อย จบเรื่อง DMAC พอดี เป็นยังไงครับพอจะอ่านแล้วเข้าใจกันหรือเปล่า คนแปลก็ได้หน้าลืมหลังไปเรื่อย คงต้องทบทวนใหม่ ยังไม่รู้จะยกตัวอย่างหรือเปล่าคงต้องหาดูตัวอย่างก่อนหรือท่านใดแนะนำหรือทำได้ก็บอกมา เรื่องต่อไปจะแปลเรื่อง timer หรือท่านใดต้องการให้แปลเรื่องใดก็บอกมา 
Title: Re: MF9BF506N DMAC
Post by: koonsai on May 20, 2015, 02:53:12 PM
 ;D  ติดตามอยู่ครับ ขอบคุณครับพี่ tha
Title: Re: MF9BF506N DMAC
Post by: ROM on May 20, 2015, 05:33:59 PM
ยอดเยี่ยมครับ ให้ like ไปเลย......
ขอบคุณ ในการแบ่งปันนะครับ ท่านนี่ สุดยอดเลย
Title: Re: MF9BF506N DMAC
Post by: tha on May 22, 2015, 04:56:45 AM
มีตัวอย่าง FM3 DMAC ครับ
http://jujurou.blog34.fc2.com/blog-entry-381.html (http://jujurou.blog34.fc2.com/blog-entry-381.html)
Title: Re: MF9BF506N DMAC
Post by: tha on May 22, 2015, 07:49:27 AM
ขอบคุณครับ ท่าน koonsai ท่าน ROM และท่านอื่นๆที่ติดตาม ไม่เสียเวลาที่แปล ก็มีกำลังใจครับ ว่าจะข้ามไปแล้วเชียว แต่มีพรายกระซิบบอกให้ทำตัวอย่าง ADC DMAC ดู ก็จะทำครับแต่คงใช้เวลาทบทวนหน่อย ท่านใดสนใจทำก็ทำไปพร้อมกันนะครับ เผื่อผมทำไม่ได้หรือติดปัญหาอะไรจะได้ถามกันได้ ถ้าได้ไม่ได้ยังไงผมก็จะโพสต์โปรแกรมผมมา   >:(
Title: Re: MF9BF506N DMAC
Post by: tha on May 23, 2015, 09:18:57 AM
ค่าที่ได้ออกมามั่วไม่รู้ผิดตรงไหนมึนแล้ว ท่านใดว่างช่วยเช็คที  :-\
https://mega.co.nz/#!ZUsnwaLT!OSzEUxDYRe5DR1PADDQkBEy3Etc88z-h5P8cyMDj1Fs (https://mega.co.nz/#!ZUsnwaLT!OSzEUxDYRe5DR1PADDQkBEy3Etc88z-h5P8cyMDj1Fs)
Title: Re: MF9BF506N DMAC
Post by: tha on May 24, 2015, 05:24:31 AM
ทำได้แล้ว 1 channel
https://mega.co.nz/#!4AsWDLpC!mT9Ux2VS-0vrPWE1qbPRgI-jqSATwP1tY_26d-lL8cY (https://mega.co.nz/#!4AsWDLpC!mT9Ux2VS-0vrPWE1qbPRgI-jqSATwP1tY_26d-lL8cY)
Title: Re: MF9BF506N DMAC
Post by: tha on May 24, 2015, 05:36:41 AM
2 channel adc dmac
https://mega.co.nz/#!NEUQDBpI!aV5-KcDthJ80uvstyKkjXdJ46_mJQGWfAMSEicvxVbU (https://mega.co.nz/#!NEUQDBpI!aV5-KcDthJ80uvstyKkjXdJ46_mJQGWfAMSEicvxVbU)
Title: Re: MF9BF506N DMAC
Post by: tha on May 24, 2015, 05:55:55 AM
ขอแก้ตัวแปรตรงนี้หน่อย ควรใช้ตัวแปรอื่นมารับค่า adc ตรงนี้เพราะถ้าใช้ตัวแปรเดิมอาจโดนทับกลางทางได้ (ประกาศตัวแปร adc_value0, adc_value1 เพิ่มมา)

    adc_value0 = (adc_value[0]>>20)*3300/4095;
    result[0] = (adc_value0/1000) + '0';
    result[1] = '.';
    result[2] = (adc_value0%1000/100) + '0';
    result[3] = (adc_value0%100/10) + '0';
    result[4] = adc_value0%10 + '0';
Title: Re: MF9BF506N DMAC
Post by: tha on May 28, 2015, 12:22:15 PM
ว่าจะทำ uart dma เลยศึกษา uart ในหนังสือ ARM Fujitsu ก่อน เอาตัวอย่างอาจารย์เขามาทำด้วย แปลงเป็น keil armcc แต่กลับแสดงเป็นตัวอักษรแปลกๆใน hyperterminal ไม่รู้เป็นที่ hardware หรือ software ท่านใดว่างช่วยเช็คดูให้หน่อย (เคยทำตามหนังสือนานมาแล้วยังได้อยู่เลย)
https://mega.co.nz/#!4V9HHTZC!w2_1UtJIQe-6W9HZryvts1_PY_wlZjrW7hc-MjmbRkM (https://mega.co.nz/#!4V9HHTZC!w2_1UtJIQe-6W9HZryvts1_PY_wlZjrW7hc-MjmbRkM)
Title: Re: MF9BF506N DMAC
Post by: tha on May 30, 2015, 09:22:26 AM
เจอข้อผิดพลาดแล้วครับ เกิดจาก human error  เอง ไปตั้งบ็อตเรตที่ hyperterminal เป็น 9600 นี่เอง  ;D ;D ;D
Title: Re: MF9BF506N DMAC
Post by: tha on May 30, 2015, 03:58:20 PM
ลองทำโปรแกรม uart บน EmIDE ดู ก็สามารถทำได้
https://mega.co.nz/#!RJdgGKaI!xS78WfRdAQiYeE5BaXBNVSd3WTGxihNC4T8M2FB9Ti0 (https://mega.co.nz/#!RJdgGKaI!xS78WfRdAQiYeE5BaXBNVSd3WTGxihNC4T8M2FB9Ti0)
เอาไฟล์ startup_mb9bf50x.s กับไฟล์ MB9BF506_rom.ld ของหนังสือ ARM Fujitsu มาใส่แทน

ที่ไฟล์ startup_mb9bf50x.s แก้

.if (Debug_RAM) ไปเป็น .if (Debug_RAM==1) ไม่ทราบว่าถูกต้องหรือเปล่าแต่ถ้าไม่แก้จะ error ถ้าเป็นตัวอย่าง keil gcc ในหนังสือจะกำหนด Debug_RAM= 0 ไว้ตรงนี้

(http://s15.postimg.org/nz9jxp2h3/keil.jpg) (http://postimg.org/image/nz9jxp2h3/)

linker script กำหนดไว้ตรงนี้

(http://s27.postimg.org/ydt46kncf/Em_IDE.jpg) (http://postimg.org/image/ydt46kncf/)

สามารถ debug ด้วย j-link โดย j-link GDB Debugger
Title: Re: MF9BF506N DMAC
Post by: tha on May 31, 2015, 12:35:19 PM
ลองทำโปรแกรม adc dmac 1 channel มาทำบน EmIDE ดู ก็สามารถทำได้ แต่จะมีปัญหาการ delay โดย systick จะช้าผิดปกติ คาดว่าสาเหตคงมาจาก clock

https://mega.co.nz/#!9VN1TCgT!P2rB7tVWzQrNtP7EVMQmTcyGABzZ_RjNSmk_FsVakvc (https://mega.co.nz/#!9VN1TCgT!P2rB7tVWzQrNtP7EVMQmTcyGABzZ_RjNSmk_FsVakvc)

เดี๋ยวจะลองเอาไฟล์ system_mb9bf50x.c, system_mb9bf50x.h อีกแบบมาใส่แทนเปรียบเทียบดู
Title: Re: MF9BF506N DMAC
Post by: tha on May 31, 2015, 01:58:03 PM
ที่ systick delay ช้ามากคงมาจาก compiler มองไม่เห็น   uint32_t SystemCoreClock = __HCLK; ในไฟล์ system_mb9bf50x.c
ผมเลยแก้ใขโดยตัด SystemInit ที start main: ในไฟล์ startup_mb9bf50x.s ออก
ตัด //extern uint32_t SystemCoreClock;  ออกจากไฟล์ system_mb9bf50x.h
แล้วไปใส่  SystemInit(); กับ uint32_t SystemCoreClock = __HCLK; ในไฟล์  main.c แทน

ตั้งค่า PLLN = 13 ให้ได้ clock = 52MHz ซึ่งน้อยกว่า 54MHz ซึ่งเป็นค่า clock สูงสุดที่ adc module จะทำได้ ดูรายละเอียดใน ADC characteristic ใน data sheet
//#define PLL_CTL2_Val          0x00000013    // <<< Define PLL_CTL2 here
#define PLL_CTL2_Val          0x0000000C    // <<< Define PLL_CTL2 here

ลด pllclkmin จาก 60000000 ลงมา 40000000 เพื่อให้คอมไพล์ผ่าน
//#define __PLLCLKMIN   ( 60000000UL)
#define __PLLCLKMIN   ( 40000000UL)

https://mega.co.nz/#!8VkAUaIS!CV-BXJmcsOvbrvj3-hNJCIpOnkTU8nbe4yy2EkqC4Fg (https://mega.co.nz/#!8VkAUaIS!CV-BXJmcsOvbrvj3-hNJCIpOnkTU8nbe4yy2EkqC4Fg)

สามารถดีบักดูค่า SystemCoreClock ได้  :)

(http://s2.postimg.org/6d8xycwyt/debug.jpg) (http://postimg.org/image/6d8xycwyt/)
Title: Re: MF9BF506N DMAC
Post by: tha on June 01, 2015, 05:14:46 AM
ลอง 2 channel เอา  uint32_t SystemCoreClock = __HCLK; มาใส่ที่ main อย่างเดียวก็ได้

https://mega.co.nz/#!8c9T3Q7a!Hv3MCQUp9mEfvR6cRrunRqbrJajrTGo_ds9zoS6d6NQ (https://mega.co.nz/#!8c9T3Q7a!Hv3MCQUp9mEfvR6cRrunRqbrJajrTGo_ds9zoS6d6NQ)

Title: Re: MF9BF506N DMAC
Post by: ROM on June 04, 2015, 03:51:55 PM
อ่านไม่ท่านเลย ขอ Save ไว้ก่อนนะ ท่าน tha
Title: Re: MF9BF506N DMAC
Post by: tha on June 06, 2015, 05:25:40 AM
รีบๆอ่านเข้านะท่าน ROM เดี๋ยวทำ uart dmac เสร็จว่าจะขึ้น timer ต่อ ฝนเริ่มตกแล้วชักจะเย็น  :)
Title: Re: MF9BF506N DMAC
Post by: tha on June 06, 2015, 07:04:53 AM
เสร็จแล้ว uart dmac กดสวิทช์แล้วโชว์ที่ hyperterminal แต่ทำใมดีบักไม่ได้ก็ไม่ทราบ
https://mega.co.nz/#!BB9mQAjA!0LbjF7Jwa0I_50l0RqHYDG3ouodIkI_2oMYDB0fUV4w (https://mega.co.nz/#!BB9mQAjA!0LbjF7Jwa0I_50l0RqHYDG3ouodIkI_2oMYDB0fUV4w)
Title: Re: MF9BF506N DMAC
Post by: tha on June 06, 2015, 07:28:56 AM
เจอสาเหตุแล้วครับ ผมไปแก้ compiler ตามนี่
http://emide.org/forum/viewtopic.php?f=5&t=944 (http://emide.org/forum/viewtopic.php?f=5&t=944)

(http://s17.postimg.org/lct7jmirv/compiler.jpg) (http://postimg.org/image/lct7jmirv/)

ไม่ได้แก้ debugger ตามด้วย ตอนนี้แก้แล้ว

(http://s29.postimg.org/hwk6ntb6r/debugger.jpg) (http://postimg.org/image/hwk6ntb6r/)
Title: Re: MF9BF506N DMAC
Post by: tha on June 13, 2015, 05:35:14 AM
ต้องขออภัยชาว electoday ที่บอกว่าจะแปลเรื่อง timer คงไม่ได้แปล เนื่องจากต้องปฏิบัติธรรมเอาทางด้านจิตใจไว้ก่อน วัตถุเทคโนโลยีคงต้องตัดทิ้งเอาไว้เพียงแค่นี้ ขอขอบคุณที่ติดตาม
Title: Re: MF9BF506N DMAC
Post by: ROM on June 14, 2015, 09:02:43 AM
Quote from: tha on June 13, 2015, 05:35:14 AM
ต้องขออภัยชาว electoday ที่บอกว่าจะแปลเรื่อง timer คงไม่ได้แปล เนื่องจากต้องปฏิบัติธรรมเอาทางด้านจิตใจไว้ก่อน วัตถุเทคโนโลยีคงต้องตัดทิ้งเอาไว้เพียงแค่นี้ ขอขอบคุณที่ติดตาม

โอ้ อนุโมทนาท่าน tha ด้วยครับ
แค่ที่ท่านช่วยแปลและทำ code เบื้องต้น ก็ช่วยเป็นข้อมูลให้กับผมได้ง่ายขึ้นมาก ขอบคุณมากครับ
ยังไงจะรอติดตามผลงานของท่านต่อๆไปนะครับ