Breakpoint mcause fix, dbg improved

master
kaqu 2 years ago
parent 80da8120ff
commit ae8cab6a1e
  1. 9
      debugger/dbgeval.py
  2. 4
      libmodules/core.py
  3. 9
      libmodules/register_file.py
  4. 19
      libmodules/risq5defs.py
  5. 2
      risq5.py
  6. 1026
      software/source/onek_nops.c
  7. 252
      software/source/testtimerinterrupt.c

@ -125,6 +125,8 @@ def disassemble(opcode, pc):
csrname = csr_description[imm_i]
except:
csrname = "csr?{0}".format(hex(imm_i))
if f3 != 0x00: # Ignore special cases (s.b.)
print("Special CSR detected: {0}".format(csrname))
if f3 == 0x03: # csrrc rd, csr, rs1 (csr read & clear)
msg = "csrrc {0},{1},{2}".format(x_description[rd], csrname, x_description[rs1])
if f3 == 0x07: # csrrci rd, csr, imm_i4 (csr read & clear immediate)
@ -187,10 +189,17 @@ def disassemble(opcode, pc):
msg = "ori {0},{1},{2}".format(x_description[rd], x_description[rs1], hex(imm_i))
elif f3 == 0x07:
msg = "andi {0},{1},{2}".format(x_description[rd], x_description[rs1], hex(imm_i))
elif op == 0x0f:
if opcode == 0x100F:
msg = "fence.i (ignored)"
else:
msg = "fence {0} (ignored)".format(hex(opcode))
else:
msg = "-- illegal? --"
print("Illegal opcode detected: {0} @{1}?".format(hex(opcode),hex(pc)))
except:
msg = "-- illegal/unknown? --"
print("Unknown opcode detected: {0} @{1}?".format(hex(opcode),hex(pc)))
return msg
def printflag(val, c1, c2):

@ -317,7 +317,7 @@ class Risq5Core(Module, AutoCSR, AutoDoc, ModuleDoc):
# If run enabled and (not single stepping or (single stepping & step pulse))
If(self.b32mode.storage[0] & (self.b32mode.storage[1] | (~self.b32mode.storage[1] & self.b32mode.storage[2])),
If(self.b32mode.storage[3] & self.b32status.storage[1], # Breakpoint valid & reached?
NextValue(regs.csr[risq5defs.CSR_mcause], risq5defs.MCAUSE_BREAKPOINT),
# Inhibits interrupt breakpoints! Hence not included: NextValue(regs.csr[risq5defs.CSR_mcause], risq5defs.MCAUSE_BREAKPOINT),
NextValue(self.b32mode.storage[1], 0), # Switch to (~ no) 'single stepping'
NextValue(self.b32mode.storage[3], 0), # Clear active breakpoint
).Elif(regs.csr[risq5defs.CSR_mstatus][risq5defs.MSTATUS_MIE] &
@ -331,7 +331,7 @@ class Risq5Core(Module, AutoCSR, AutoDoc, ModuleDoc):
).Else( # Machine mode: Timer interrupt assumed
NextValue(self.b32mode.storage[6], 0), # Reset external command
NextValue(self.b32status.storage[11], 1), # Edge store
NextValue(regs.csr[risq5defs.CSR_mcause], risq5defs.MCAUSE_MACHINE_TIMER_INTERRUPT),
NextValue(regs.csr[risq5defs.CSR_mcause], risq5defs.MCAUSE_MACHINE_TIMER_INTERRUPT), # 0x80000007
),
NextValue(regs.csr[risq5defs.CSR_mstatus][risq5defs.MSTATUS_MPIE], regs.csr[risq5defs.CSR_mstatus][risq5defs.MSTATUS_MIE]), # Store pending interrupt indication
NextValue(regs.csr[risq5defs.CSR_mip], regs.csr[risq5defs.CSR_mie]), # Store current interrupt flags

@ -112,11 +112,12 @@ class Risq5RegisterFile(Module):
]
# ------------------------- CSRs ----------------------------------------------------
self.csr = Array(Signal(32, reset_less=True) for _ in range(13)) # csr[0..12]
self.csr = Array(Signal(32) for _ in range(15)) # csr[0..12]
# Translate CSR ID codes -> Index
self.csrindex = Signal(4, reset_less=True) # 0..15
self.comb += [
If(self.imm_i == risq5defs.CSR_mip_id, self.csrindex.eq(risq5defs.CSR_mip) # mip (Machine interrupt pending)
If( self.imm_i == risq5defs.CSR_mstatus_id, self.csrindex.eq(risq5defs.CSR_mstatus) # mstatus (Interrupt enable & stati)
).Elif(self.imm_i == risq5defs.CSR_mip_id, self.csrindex.eq(risq5defs.CSR_mip) # mip (Machine interrupt pending)
).Elif(self.imm_i == risq5defs.CSR_mie_id, self.csrindex.eq(risq5defs.CSR_mie) # mie (Machine interrupt enable)
).Elif(self.imm_i == risq5defs.CSR_mcause_id, self.csrindex.eq(risq5defs.CSR_mcause) # mcause (Machine exception cause)
).Elif(self.imm_i == risq5defs.CSR_mtvec_id, self.csrindex.eq(risq5defs.CSR_mtvec) # mtvec (Machine trap vector)
@ -130,7 +131,9 @@ class Risq5RegisterFile(Module):
).Elif(self.imm_i[0:11] == risq5defs.CSR_marchid_id, self.csrindex.eq(risq5defs.CSR_marchid) # marchid (Machine base microarchitecture)
).Elif(self.imm_i[0:11] == risq5defs.CSR_mimpid_id, self.csrindex.eq(risq5defs.CSR_mimpid) # mimpid (Machine base microarchitecture version)
).Elif(self.imm_i[0:11] == risq5defs.CSR_mhartid_id, self.csrindex.eq(risq5defs.CSR_mhartid) # mhartid (Machine hardware thread ('core') ID)
).Else(self.csrindex.eq(risq5defs.CSR_mstatus)), # mstatus (0x300) by default (Interrupt enable & stati)
).Elif(self.imm_i[0:11] == risq5defs.CSR_0xBC0_id, self.csrindex.eq(risq5defs.CSR_0xBC0) # Custom shadow register (for vex?!)
).Elif(self.imm_i[0:11] == risq5defs.CSR_0xFC0_id, self.csrindex.eq(risq5defs.CSR_0xFC0) # Custom shadow register (for vex?!)
).Else(self.csrindex.eq(risq5defs.CSR_dummy)), # Dummy bit bucket ...
]

@ -18,12 +18,15 @@ CSR_mtvec = 4 # 0x305 mtvec (Machine trap vector)
CSR_mtval = 5 # 0x343 mtval (Machine trap value)
CSR_mepc = 6 # 0x341 mepc (Machine exception pc)
CSR_mscratch = 7 #0x340 mscratch (Machine scratch)
# Static parts
CSR_misa = 8 # 0x301 misa (Machine ISA)
CSR_mvendorid = 9 # 0xF11 mvendorid (Machine vendor ID)
CSR_marchid = 10 # 0xF12 marchid (Machine base microarchitecture)
CSR_mimpid = 11 # 0xF13 mimpid (Machine base microarchitecture version)
CSR_mhartid = 12 # 0xF14 mhartid (Machine hardware thread ('core') ID)
CSR_0xBC0 = 8 # 0xBC0 custom shadow register (read/write)
# Static parts (read only)
CSR_misa = 9 # 0x301 misa (Machine ISA)
CSR_mvendorid = 10 # 0xF11 mvendorid (Machine vendor ID)
CSR_marchid = 11 # 0xF12 marchid (Machine base microarchitecture)
CSR_mimpid = 12 # 0xF13 mimpid (Machine base microarchitecture version)
CSR_mhartid = 13 # 0xF14 mhartid (Machine hardware thread ('core') ID)
CSR_0xFC0 = 14 # 0xFC0 custom shadow register
CSR_dummy = 15 # Shall never occurr ...
# RISC-V opcode defs.
CSR_mstatus_id = 0x300 # mstatus by default (Interrupt enable & stati)
@ -34,13 +37,15 @@ CSR_mtvec_id = 0x305 # mtvec (Machine trap vector)
CSR_mtval_id = 0x343 # mtval (Machine trap value)
CSR_mepc_id = 0x341 # mepc (Machine exception pc)
CSR_mscratch_id = 0x340 # mscratch (Machine scratch)
# Static parts
CSR_0xBC0_id = 0xBC0 # custom shadow register (read/write)
# Static parts (read only)
CSR_misa_id = 0x301 # misa (Machine ISA)
# Signed->Unsigned (cut off hi-bit ;)
CSR_mvendorid_id = 0x711 # mvendorid (Machine vendor ID)
CSR_marchid_id = 0x712 # marchid (Machine base microarchitecture)
CSR_mimpid_id = 0x713 # mimpid (Machine base microarchitecture version)
CSR_mhartid_id = 0x714 # mhartid (Machine hardware thread ('core') ID)
CSR_0xFC0_id = 0x7C0 # custom shadow register (read only)
# mstatus bits used
MSTATUS_MIE = 3 # Machine mode: Interrupt enable

@ -237,7 +237,7 @@ class BaseSoC(SoCCore):
self.add_csr("clint")
# Integrate my RISC-V cpu clone
RAMWAITTIME=0x00100000 # 32-bit max. (8-bit 128 seems to work as well)
RAMWAITTIME=0x00000200 # 32-bit max. for testing ... (TODO: 8-bit 128 seems to work as well)
self.submodules.risq5 = risq5 = Risq5Core(
RAMWaitTime=RAMWAITTIME,
L1CacheSize=MAXWORDS,

@ -0,0 +1,1026 @@
__asm__ __volatile__ ("\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
");

@ -3,18 +3,14 @@
#pragma GCC diagnostic ignored "-Wunused-function"
static void setDownCounter(void)
{ // 64-bit values!
//clint_mtimecmp_write(0x0000000010000000); //clint_mtime_read()+0x100000); // Start timer
/*csr_write_simple(v >> 56, CSR_BASE + 0x7020L);
csr_write_simple(v >> 48, CSR_BASE + 0x7024L);
csr_write_simple(v >> 40, CSR_BASE + 0x7028L);
csr_write_simple(v >> 32, CSR_BASE + 0x702cL);
csr_write_simple(v >> 24, CSR_BASE + 0x7030L);
csr_write_simple(v >> 16, CSR_BASE + 0x7034L);
csr_write_simple(v >> 8, CSR_BASE + 0x7038L);
csr_write_simple(v, CSR_BASE + 0x703cL);
*/
csr_write_simple(0x12, CSR_BASE + 0x7030L); // Just single byte test
clint_mtimecmp_write(0x0000000012000000);
}
extern uint32_t gettimer(void);
uint32_t gettimer(void)
{
uint32_t st = systime_b32CurrentMSeconds_read();
return st;
}
#pragma GCC diagnostic ignored "-Wunused-function"
@ -45,237 +41,25 @@ static void start(void)
loop: addi t0,t0,1 # Stupid job loop \n\
addi t0,t0,2 # ... \n\
add t2,zero,zero # Reset t2 \n\
call gettimer # Read systime clock \n\
j loop # Loop jump \n\
nop # \n\
myint: addi t1,t1,1 # Interrupt routine \n\
csrr t2,mcause # Figure out interrupt type \n\
call setDownCounter # Call C \n\
#call setDownCounter # Call C \n\
csrr t3,mtvec # Verify execption vector \n\
bne t3,zero,ok # Jump if not reset \n\
addi t4,t4,1 # Count zero vectors (fault) \n\
ok: mret # --------------------------- \n\
ok: csrr t2,mepc # Pick return address (test) \n\
mret # --------------------------- \n\
# \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\
nop # ... \n\