paul@0 | 1 | #ifndef __ASSEMBLER__ |
paul@0 | 2 | |
paul@0 | 3 | #ifndef __PIC32_C_H__ |
paul@0 | 4 | #define __PIC32_C_H__ |
paul@0 | 5 | |
paul@0 | 6 | #include <stdint.h> |
paul@2 | 7 | #include "mips.h" |
paul@0 | 8 | #include "pic32.h" |
paul@0 | 9 | |
paul@0 | 10 | /* Access. */ |
paul@0 | 11 | |
paul@10 | 12 | #define REG(mem) *((volatile uint32_t *) (mem)) |
paul@0 | 13 | |
paul@0 | 14 | /* Bit clearing, setting and inverting. */ |
paul@0 | 15 | |
paul@10 | 16 | static inline void CLR_REG(uint32_t mem, uint32_t val) |
paul@10 | 17 | { |
paul@10 | 18 | REG(mem + CLR) = val; |
paul@10 | 19 | } |
paul@10 | 20 | |
paul@10 | 21 | static inline void SET_REG(uint32_t mem, uint32_t val) |
paul@10 | 22 | { |
paul@10 | 23 | REG(mem + SET) = val; |
paul@10 | 24 | } |
paul@10 | 25 | |
paul@10 | 26 | static inline void INV_REG(uint32_t mem, uint32_t val) |
paul@10 | 27 | { |
paul@10 | 28 | REG(mem + INV) = val; |
paul@10 | 29 | } |
paul@0 | 30 | |
paul@2 | 31 | /* Address translation. */ |
paul@2 | 32 | |
paul@10 | 33 | static inline uint32_t PHYSICAL(uint32_t addr) |
paul@10 | 34 | { |
paul@10 | 35 | return ((uint32_t) addr) - KSEG0_BASE; |
paul@10 | 36 | } |
paul@10 | 37 | |
paul@10 | 38 | static inline uint32_t HW_PHYSICAL(uint32_t addr) |
paul@10 | 39 | { |
paul@10 | 40 | return ((uint32_t) addr) - KSEG1_BASE; |
paul@10 | 41 | } |
paul@2 | 42 | |
paul@3 | 43 | /* Register collection access. */ |
paul@3 | 44 | |
paul@10 | 45 | static inline uint32_t DMA_REG(int channel, uint32_t reg) |
paul@10 | 46 | { |
paul@10 | 47 | return DCHBASE + reg + (channel - DCHMIN) * DCHSTEP; |
paul@10 | 48 | } |
paul@10 | 49 | |
paul@14 | 50 | static inline uint32_t OC_REG(int unit, uint32_t reg) |
paul@10 | 51 | { |
paul@14 | 52 | return OCBASE + reg + (unit - OCMIN) * OCSTEP; |
paul@10 | 53 | } |
paul@10 | 54 | |
paul@14 | 55 | static inline uint32_t TIMER_REG(int timer, uint32_t reg) |
paul@10 | 56 | { |
paul@14 | 57 | return TIMERBASE + reg + (timer - TIMERMIN) * TIMERSTEP; |
paul@14 | 58 | } |
paul@14 | 59 | |
paul@14 | 60 | static inline uint32_t UART_REG(int uart, uint32_t reg) |
paul@14 | 61 | { |
paul@14 | 62 | return UARTBASE + reg + (uart - UARTMIN) * UARTSTEP; |
paul@10 | 63 | } |
paul@10 | 64 | |
paul@10 | 65 | /* Convenience types. */ |
paul@10 | 66 | |
paul@10 | 67 | enum dma_chain |
paul@10 | 68 | { |
paul@10 | 69 | dma_chain_none, |
paul@10 | 70 | dma_chain_next, |
paul@10 | 71 | dma_chain_previous, |
paul@10 | 72 | }; |
paul@3 | 73 | |
paul@0 | 74 | #endif /* __PIC32_C_H__ */ |
paul@0 | 75 | |
paul@0 | 76 | #endif /* __ASSEMBLER__ */ |