summaryrefslogtreecommitdiff
path: root/firmware/init.c
blob: 04e27a6197633af40686e6068f1d6d86d62e1787 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <xc.h>

#include "t6963c_specific.h"
#include "t6963c/t6963c.h"

void init_clock(void) {
	// CPDIV 1:1; RCDIV FRC/2; DOZE 1:8; G1CLKSEL disabled; DOZEN disabled; ROI disabled;
	CLKDIV = 0x3100;
	// GCLKDIV 1;
	CLKDIV2 = 0x0000;
}

void init_pins(void) {
	LATB = 0x00;
	TRISB = 0xFFFF;
	LATC = 0x00;
	TRISC = 0xF000;
	LATD = 0x00;
	TRISD = 0x0AFF;
	LATE = 0x00;
	TRISE = 0xFF;
	LATF = 0x00;
	TRISF = 0xBB;
	LATG = 0x00;
	TRISG = 0x038C;

	/****************************************************************************
	 * Setting the Analog/Digital Configuration SFR
	 ***************************************************************************/
	ANSB = 0x3F;
	ANSC = 0x6000;
	ANSD = 0xC0;
	ANSF = 0x01;
	ANSG = 0x00;

	/****************************************************************************
	 * Set the PPS
	 ***************************************************************************/
	__builtin_write_OSCCONL(OSCCON & 0xbf); // unlock PPS
	RPOR1bits.RP2R = 0x03; // RD8->UART1:U1TX
	RPINR18bits.U1RXR = 0x04; // RD9->UART1:U1RX
	RPOR1bits.RP3R = 0x04; // RD10->UART1:U1RTS
	RPINR18bits.U1CTSR = 0x0C; // RD11->UART1:U1CTS
	RPOR10bits.RP21R = 0x07; // RG6->SPI1:SDO1
	RPINR20bits.SDI1R = 0x1A; // RG7->SPI1:SDI1
	RPOR9bits.RP19R = 0x08; // RG8->SPI1:SCK1OUT
	RPOR13bits.RP27R = 0x09; // RG9->SPI1:SS1OUT
	__builtin_write_OSCCONL(OSCCON | 0x40); // lock   PPS
}

void init_lcd(void) {
	t6963c_init();
	t6963c_clear();
}

void init_uart(void) {
	// STSEL 1; IREN disabled; PDSEL 8N; UARTEN enabled; RTSMD disabled; RXINV disabled; USIDL disabled; WAKE disabled; ABAUD disabled; LPBACK disabled; BRGH enabled; UEN TX_RX;
	U1MODE = 0x8008;
	// OERR NO_ERROR_cleared; UTXISEL0 TX_ONE_CHAR; URXISEL RX_ONE_CHAR; UTXBRK COMPLETED; UTXEN disabled; ADDEN disabled; UTXINV disabled;
	U1STA = 0x0000;
	// U1TXREG 0x0000;
	U1TXREG = 0x0000;
	// U1RXREG 0x0000;
	U1RXREG = 0x0000;
	// Baud Rate = 115200; BRG 34;
	U1BRG = 0x0022;
}

void init(void) {
	init_clock();
	init_pins();
	init_lcd();
}