1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/include/init.h Mon Oct 22 21:44:02 2018 +0200
1.3 @@ -0,0 +1,164 @@
1.4 +/*
1.5 + * PIC32 peripheral configuration and initialisation.
1.6 + *
1.7 + * Copyright (C) 2017, 2018 Paul Boddie <paul@boddie.org.uk>
1.8 + *
1.9 + * This program is free software: you can redistribute it and/or modify
1.10 + * it under the terms of the GNU General Public License as published by
1.11 + * the Free Software Foundation, either version 3 of the License, or
1.12 + * (at your option) any later version.
1.13 + *
1.14 + * This program is distributed in the hope that it will be useful,
1.15 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
1.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1.17 + * GNU General Public License for more details.
1.18 + *
1.19 + * You should have received a copy of the GNU General Public License
1.20 + * along with this program. If not, see <http://www.gnu.org/licenses/>.
1.21 + */
1.22 +
1.23 +#ifndef __INIT_H__
1.24 +#define __INIT_H__
1.25 +
1.26 +#include "pic32_c.h"
1.27 +
1.28 +
1.29 +
1.30 +/* Basic initialisation. */
1.31 +
1.32 +void init_memory(void);
1.33 +void init_pins(void);
1.34 +void init_outputs(void);
1.35 +
1.36 +
1.37 +
1.38 +/* Peripheral pin configuration. */
1.39 +
1.40 +void lock_config(void);
1.41 +void unlock_config(void);
1.42 +
1.43 +
1.44 +
1.45 +/* Convenience operations. */
1.46 +
1.47 +void interrupts_on(void);
1.48 +
1.49 +
1.50 +
1.51 +/* DMA configuration. */
1.52 +
1.53 +void init_dma(void);
1.54 +
1.55 +void dma_init(int channel, uint8_t pri);
1.56 +
1.57 +void dma_init_interrupt(int channel, uint8_t conditions,
1.58 + uint8_t pri, uint8_t sub);
1.59 +
1.60 +void dma_off(int channel);
1.61 +
1.62 +void dma_on(int channel);
1.63 +
1.64 +void dma_set_auto_enable(int channel, int enable);
1.65 +
1.66 +void dma_set_chaining(int channel, enum dma_chain chain);
1.67 +
1.68 +void dma_set_enable(int channel, int enable);
1.69 +
1.70 +void dma_set_interrupt(int channel, uint8_t int_num, int enable);
1.71 +
1.72 +void dma_set_interrupt_enable(int channel, int enable);
1.73 +
1.74 +void dma_set_receive_events(int channel, int enable);
1.75 +
1.76 +void dma_set_transfer(int channel,
1.77 + uint32_t source_start_address, uint16_t source_size,
1.78 + uint32_t destination_start_address, uint16_t destination_size,
1.79 + uint16_t cell_size);
1.80 +
1.81 +int DMA_INT_FLAGS(int channel, uint8_t flags);
1.82 +
1.83 +uint32_t DMA_IPC_PRI(int channel, uint8_t pri, uint8_t sub);
1.84 +
1.85 +
1.86 +
1.87 +/* External interrupt configuration. */
1.88 +
1.89 +void int_init_interrupt(int int_num, uint8_t pri, uint8_t sub);
1.90 +
1.91 +int INT_INT_FLAGS(int int_num, uint8_t flags);
1.92 +
1.93 +uint32_t INT_IPC_PRI(int int_num, uint8_t pri, uint8_t sub);
1.94 +uint32_t INT_IPC_REG(int int_num);
1.95 +
1.96 +
1.97 +
1.98 +/* Output compare configuration. */
1.99 +
1.100 +void oc_init(int unit, uint8_t mode, int timer);
1.101 +
1.102 +void oc_init_interrupt(int unit, uint8_t pri, uint8_t sub);
1.103 +
1.104 +void oc_on(int unit);
1.105 +
1.106 +void oc_set_pulse(int unit, uint32_t start);
1.107 +
1.108 +void oc_set_pulse_end(int unit, uint32_t end);
1.109 +
1.110 +int OC_INT_FLAGS(int unit, uint8_t flags);
1.111 +
1.112 +uint32_t OC_IPC_PRI(int unit, uint8_t pri, uint8_t sub);
1.113 +uint32_t OC_IPC_REG(int unit);
1.114 +
1.115 +
1.116 +
1.117 +/* Parallel mode configuration. */
1.118 +
1.119 +void init_pm(void);
1.120 +
1.121 +void pm_init(int port, uint8_t mode);
1.122 +
1.123 +void pm_init_interrupt(int port, uint8_t pri, uint8_t sub);
1.124 +
1.125 +void pm_off(int port);
1.126 +
1.127 +void pm_on(int port);
1.128 +
1.129 +void pm_set_output(int port, int write_enable, int read_enable);
1.130 +
1.131 +int PM_INT_FLAGS(int port, uint8_t flags);
1.132 +
1.133 +uint32_t PM_IPC_PRI(int port, uint8_t pri, uint8_t sub);
1.134 +uint32_t PM_IPC_REG(int port);
1.135 +
1.136 +
1.137 +
1.138 +/* Timer configuration. */
1.139 +
1.140 +void timer_init(int timer, uint8_t prescale, uint16_t limit);
1.141 +
1.142 +void timer_init_interrupt(int timer, uint8_t pri, uint8_t sub);
1.143 +
1.144 +void timer_on(int timer);
1.145 +
1.146 +int TIMER_INT_FLAGS(int timer, uint8_t flags);
1.147 +
1.148 +uint32_t TIMER_IPC_PRI(int timer, uint8_t pri, uint8_t sub);
1.149 +uint32_t TIMER_IPC_REG(int timer);
1.150 +
1.151 +
1.152 +
1.153 +/* UART configuration. */
1.154 +
1.155 +void uart_init(int uart, uint32_t baudrate);
1.156 +
1.157 +void uart_init_interrupt(int uart, uint8_t conditions,
1.158 + uint8_t pri, uint8_t sub);
1.159 +
1.160 +void uart_on(int uart);
1.161 +
1.162 +int UART_INT_FLAGS(int uart, uint8_t flags);
1.163 +
1.164 +uint32_t UART_IPC_PRI(int uart, uint8_t pri, uint8_t sub);
1.165 +uint32_t UART_IPC_REG(int uart);
1.166 +
1.167 +#endif /* __INIT_H__ */