แท็บ I/O — Memory-mapped I/O

เพิ่มอุปกรณ์จำลอง เช่น LED matrix, switches, ปุ่มกด เข้าสู่ระบบ แล้วเชื่อมต่อกับโปรแกรมผ่าน memory-mapped I/O — สร้างระบบ embedded ขนาดเล็กได้ภายในไม่กี่นาที

หน้าจอแท็บ I/O
หน้าจอ I/O tab — ซ้าย: รายการอุปกรณ์, กลาง: อุปกรณ์ที่ใช้งานอยู่, ขวา: รายละเอียดและ register map

โครงสร้างหน้าจอ

หมายเลขส่วนคำอธิบาย
1Device listรายการอุปกรณ์ที่มีให้เลือก — Double-click เพื่อสร้าง instance
2Active devicesพื้นที่แสดงอุปกรณ์ที่กำลังใช้งาน
3Pop-out buttonดึงอุปกรณ์ออกเป็นหน้าต่างลอย เพื่อดูพร้อมกับแท็บอื่นได้
4Device detailsรายละเอียดของอุปกรณ์ที่เลือก
5Register mapรายชื่อ register, address offset, สิทธิ์อ่าน/เขียน, bit-width
6Exported symbolsชื่อตัวแปรที่ใช้ใน assembly/C ได้ (เช่น LED_MATRIX_0_BASE)
7All exported definitionsรวม define ทั้งหมดของอุปกรณ์ที่สร้างไว้

วิธีใช้อุปกรณ์ในโปรแกรม

ในภาษา Assembly

ใช้ชื่อ symbol ของอุปกรณ์ที่ปรากฏใน Exported symbols ได้ทันทีในที่ที่รับ immediate value ได้:

li a0 LED_MATRIX_0_BASE   # โหลด base address ของ LED matrix
li a1 LED_MATRIX_0_WIDTH  # โหลดความกว้าง

ในภาษา C

เพิ่ม include header แล้วใช้ #define ได้เลย:

#include "ripes_system.h"

int main() {
    volatile unsigned* leds = (unsigned*) LED_MATRIX_0_BASE;
    volatile unsigned* switches = (unsigned*) SWITCHES_0_BASE;
    // ...
}

ตัวอย่าง: Switches + LEDs

ตัวอย่างนี้แสดงการเขียนโปรแกรมให้สวิตช์ควบคุม LED แต่ละดวง

ขั้นที่ 1 — สร้างอุปกรณ์

  1. ไปที่แท็บ I/O
  2. Double-click LED Matrix ที่ device list
  3. เลือก LED Matrix ที่เพิ่งสร้าง ไปที่ Parameters: ตั้ง Height = 1, Width = 8, เพิ่ม LED size ให้ใหญ่ขึ้น
  4. Double-click Switches เพื่อสร้าง switch panel

ขั้นที่ 2 — โหลดโปรแกรม

เลือก File → Load Example → C → switchesAndLeds.c

หลักการของโปรแกรม: โหลด base address ของ LED matrix และ switches แล้ววนตรวจสอบ bitmask ของ switches ทีละ bit — ถ้า bit ใดเปิดอยู่ ก็ทำให้ LED ที่ตำแหน่งนั้นสว่าง

ขั้นที่ 3 — รันและทดสอบ

  1. กดปุ่ม Build (Ctrl+B) เพื่อ compile
  2. กลับมาที่แท็บ I/O
  3. กด Run เพื่อรันโปรแกรม
  4. คลิกสลับ switch ดู — LED ตำแหน่งนั้นควรสว่างขึ้น
ความเร็วในการ Simulate เมื่อทำงานกับ I/O อยากให้ตอบสนองเร็ว ให้:
  • สลับมาใช้ Single Cycle processor
  • ลดค่า "Max. cache plot cycles" ในหน้า Settings

เปรียบเทียบ Run กับ Step

ลองทดลองเอง:

นี่คือการจำลองความรู้สึกของการรัน firmware ใน CPU ความเร็วต่ำ

อุปกรณ์ที่มีให้เลือก

รายการอุปกรณ์อาจเปลี่ยนแปลงตามเวอร์ชันของ Ripes — ตรวจสอบในหน้า device list ของเครื่องคุณ