หัวใจหลักในการทำงานของ MCU ทุกประเภทคือ Clock Control หากไม่มี Clock หรือ สัญญาณนาฬิกา ก็จะไม่มีการกระตุ้นหรือการขับเคลื่อนในการทำงานใดๆกับ วงจรหรือโมดูลต่อพวงใดภายใน MCU

Register และ Address ที่เกี่ยวข้อง

โดยทั่วไปแล้ว MCU จะทำงานได้เมื่อเราเขียน Code เข้าไปความคุมค่าต่างๆใน Address ที่ระบุการทำงานในจุดนั้นๆ ในที่นี้จะเป็นส่วนของ Clock Control โดยมีรายละเอียดดังนี้

ในการกำหนดค่าการทำงานของ Clock Control จะมี Address เริ่มต้นที่ 0x4002 1000 – 0x4002 1400 ใช้สำหรับ เปิด/ปิด สัญญาณ Clock ของ Module ต่างๆ

ในช่วง Address ที่ระบุไว้สามารถแยกย่อยได้ตามตารางที่เกี่ยวข้องด้านล่างนี้

โดยหลักๆแล้ว ในการเปิดการทำงานของวงจรต่างๆ จะใช้ Register ขนาด 32bit ที่ชื่อ RCC_AHBCENR, RCC_APB1CENR, RCC_APB2CENR ในการปิดใช้งาน GPIO, I2C, USART และอื่นๆที่เกี่ยวข้อง จะกล่างถึงวิธีการใช้งานในบทอื่นๆ

AHB ย่อมาจาก Advanced High-performance Bus ซึ่งเป็นชนิดของ Bus ที่ใช้ในการเชื่อมต่อระหว่างคอร์ (Core) กับอุปกรณ์ต่าง ๆ ในไมโครคอนโทรเลอร์ เช่น หน่วยความจำ SRAM, หน่วยความจำ Flash, อุปกรณ์ I/O, และอุปกรณ์อื่น ๆ

APB1/2 ย่อมาจาก Advanced Peripheral Bus 1/2 ซึ่งเป็นชนิดของ Bus ที่ใช้ในการเชื่อมต่อระหว่างคอร์ (Core) กับอุปกรณ์ต่าง ๆ ในไมโครคอนโทรเลอร์ เช่น อุปกรณ์ USART, SPI, I2C, Timer, และอุปกรณ์อื่น ๆ

Bus ชนิดนี้มีความเร็วต่ำกว่า AHB แต่มีความสามารถในการจัดการแบบพิเศษเช่นเดียวกับ AHB โดยสามารถใช้งานร่วมกับ AHB ได้ และมีการแบ่งแยกความเร็วในการเชื่อมต่ออุปกรณ์ต่าง ๆ ในไมโครคอนโทรเลอร์ โดย APB1 มีความเร็วสูงสุดที่ 36 MHz

ไฟล์ที่เกี่ยวข้องที่ได้รวบรวมไว้ https://www.makerwitawat.com/gdrive

อธิบายคำย่อของ Access
Register ที่ควบคุม Clock ภายใน/ภายนอก สามารถความคุมความถี่รวมทั้งระบบ

ค่าที่เกี่ยวข้องกับการควบคุมความถี่รวมทั้งระบบ จะอยู่ที่ system_ch32v00x.c เป็นตัวกำหนดว่าจะใช้ตัวกำเนิดความถี่ ภายใน หรือ ภายนอก และใช้ความถี่หลักในการทำงานที่ความเร็วสูงสุดเท่าไหร่

Register ที่ควบคุมตัวหาร ความถี่เพื่อใช้คำนวณค่า ADC
Register ที่ความคุมการทำงานของ Interrupt
Register ควมคุม Reset ค่า USART, SPI, TIM1, ADC, GPIO ใน Bus APB2
Register ควบคุม Reset ค่า PWR, I2C, WWD, TIM2 ใน Bus APB1
Register ควบคุม เปิด/ปิด SRAM, DMA
Register ควบคุม เปิด/ปิด USART, SPI, TIM, GPIO ใน Bus APB2
Register ควบคุม เปิด/ปิด PWR, I2C, WWD, TIM2 ใน Bus APB1
Register ควบคุม เปิด/ปิด Option เสริมของ GPIO, WWD, IWD, NRST

Code ที่เกี่ยวข้อง

Function ทั้งหมดที่ความคุมการทำงาน Clock Control

code ที่เกี่ยวข้องกับการควบคุม Register RCC จะอยู่ที่ไฟล์ ch32v00x_rcc.h และ ch32v00x_rcc.c ใน folder ที่อยู่ใน Framework หลักที่ทาง WCH เตรียมไว้ให้ โดยทั่วไปจะมีการเรียกใช้งาน Function หลักๆดังนี้

เปิด/ปิด การทำงาน SRAM, DMA1
เปิด/ปิด AFIO, GPIO, ADC1, TIM1, SPI1, USART1
เปิด/ปิด TIM2, WWDG, I2C1, PWR
Reset AFIO, GPIO, ADC1, TIM1, SPI1, USART1
Reset TIM2, WWDG, I2C1, PWR

บทสรุป

ในการเปิด/ปิด การใช้งาน วงจรย่อยใดๆ ภายในตัว CH32V003 ต้องมาตั้งค่า Register Clock Control ก่อนเสมอ และในส่วนของการย้าย function การทำงานเช่นการ สลับ PIN ต่างๆ ก็ต้องมาตั้งค่าในจุดนี้ด้วย

CH32V003 : https://shopee.co.th/witawat57/23167328296

สนับสนุนร้านค้าของเรา เพื่อจะได้เป็นกำลังใจเขียนบทความใหม่ๆ

บทความที่เกี่ยวข้อง