mcause
Machine Cause
Reports the cause of the latest exception.
Attributes
| Defining Extension | Sm, version >= Sm@1.11.0 | 
|---|---|
| CSR Address | 0x342 | 
| Length | * 32 when CSR[misa].MXL == 0 * 64 when CSR[misa].MXL == 1 | 
| Privilege Mode | M | 
Format
This CSR format changes dynamically.
Figure 1. mcause Format when CSR[misa].MXL == 0
Figure 2. mcause Format when CSR[misa].MXL == 1
Field Summary
| Name | Location | Type | Reset Value | 
|---|---|---|---|
| * 31 when CSR[misa].MXL == 0 * 63 when CSR[misa].MXL == 1 | RW-RH | 0 | |
| * 30:0 when CSR[misa].MXL == 0 * 62:0 when CSR[misa].MXL == 1 | RW-RH | 0 | 
Software write
This CSR may store a value that is different from what software attempts to write.
When a software write occurs (e.g., through csrrw), the following determines the written value:
INT = # the write only holds if the INT/CODE combination is valid
if (csr_value.INT == 1) {
  if (valid_interrupt_code?(csr_value.CODE)) {
    return 1;
  }
  return ILLEGAL_WLRL;
} else {
  if (valid_exception_code?(csr_value.CODE)) {
    return 1;
  }
  return ILLEGAL_WLRL;
}
CODE = # the write only holds if the INT/CODE combination is valid
if (csr_value.INT == 1) {
  if (valid_interrupt_code?(csr_value.CODE)) {
    return csr_value.CODE;
  }
  return ILLEGAL_WLRL;
} else {
  if (valid_exception_code?(csr_value.CODE)) {
    return csr_value.CODE;
  }
  return ILLEGAL_WLRL;
}