From 1aad7b52f6381967caf1a3b92b50b4329114eb8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=28xq=29=20Quei=C3=9Fner?= Date: Thu, 29 Apr 2021 00:45:23 +0200 Subject: [PATCH] Ports over sbi, cbi to avr5.zig. --- src/modules/chips/atmega328p/atmega328p.zig | 31 ++++----------------- src/modules/cpus/avr/avr5.zig | 20 +++++++++++-- 2 files changed, 24 insertions(+), 27 deletions(-) diff --git a/src/modules/chips/atmega328p/atmega328p.zig b/src/modules/chips/atmega328p/atmega328p.zig index 7192049..da30901 100644 --- a/src/modules/chips/atmega328p/atmega328p.zig +++ b/src/modules/chips/atmega328p/atmega328p.zig @@ -42,18 +42,11 @@ pub const gpio = struct { } pub fn setOutput(comptime pin: type) void { - asm volatile ("sbi %[port], %[pin]" - : - : [port] "I" (regs(pin).dir_addr), - [pin] "I" (pin.pin) - ); + cpu.sbi(regs(pin).dir_addr, pin.pin); } + pub fn setInput(comptime pin: type) void { - asm volatile ("cbi %[port], %[pin]" - : - : [port] "I" (regs(pin).dir_addr), - [pin] "I" (pin.pin) - ); + cpu.cbi(regs(pin).dir_addr, pin.pin); } pub fn read(comptime pin: type) u1 { @@ -65,25 +58,13 @@ pub const gpio = struct { pub fn write(comptime pin: type, state: u1) void { if (state == 1) { - asm volatile ("sbi %[port], %[pin]" - : - : [port] "I" (regs(pin).port_addr), - [pin] "I" (pin.pin) - ); + cpu.sbi(regs(pin).port_addr, pin.pin); } else { - asm volatile ("cbi %[port], %[pin]" - : - : [port] "I" (regs(pin).port_addr), - [pin] "I" (pin.pin) - ); + cpu.cbi(regs(pin).port_addr, pin.pin); } } pub fn toggle(comptime pin: type) void { - asm volatile ("sbi %[port], %[pin]" - : - : [port] "I" (regs(pin).pin_addr), - [pin] "I" (pin.pin) - ); + cpu.sbi(regs(pin).pin_addr, pin.pin); } }; diff --git a/src/modules/cpus/avr/avr5.zig b/src/modules/cpus/avr/avr5.zig index 9994b74..baa0093 100644 --- a/src/modules/cpus/avr/avr5.zig +++ b/src/modules/cpus/avr/avr5.zig @@ -1,13 +1,29 @@ const std = @import("std"); -pub fn sei() void { +pub fn sei() callconv(.Inline) void { asm volatile ("sei"); } -pub fn cli() void { +pub fn cli() callconv(.Inline) void { asm volatile ("cli"); } +pub fn sbi(comptime reg: u5, comptime bit: u3) callconv(.Inline) void { + asm volatile ("sbi %[reg], %[bit]" + : + : [reg] "I" (reg), + [bit] "I" (bit) + ); +} + +pub fn cbi(comptime reg: u5, comptime bit: u3) callconv(.Inline) void { + asm volatile ("cbi %[reg], %[bit]" + : + : [reg] "I" (reg), + [bit] "I" (bit) + ); +} + pub const startup_logic = struct { comptime { asm (