]> git.ozlabs.org Git - minimigmac.git/blob - pic/hardware.h
Initial commit
[minimigmac.git] / pic / hardware.h
1 #ifndef __HARDWARE_H__\r
2 #define __HARDWARE_H__\r
3 \r
4 #include <pic18f252.h>\r
5 #include <stdbool.h>\r
6 \r
7 /* IO defines*/\r
8 #define PROG_B          TRISAbits.TRISA2        /* FPGA config */\r
9 #define PROG_B_VAL      PORTAbits.RA2           /* FPGA config */\r
10 #define DONE            PORTBbits.RB3           /* FPGA config */\r
11 #define INIT_B          PORTAbits.RA3           /* FPGA config */\r
12 #define CCLK            LATAbits.LATA5          /* FPGA config */\r
13 #define DIN             LATBbits.LATB7          /* FPGA config */\r
14 #define _SW0            PORTBbits.RB0           /* Switch input */\r
15 #define _SW1            PORTBbits.RB1           /* Switch input */\r
16 #define _M_CD           TRISAbits.TRISA0        /* mmc card clock disable */\r
17 #define _M_CS           PORTCbits.RC0           /* mmc card spi select */\r
18 #define _F_CS0          PORTAbits.RA1           /* FGPA spi0 select */\r
19 #define SCSI_HSHAKE     PORTBbits.RB5           /* SCSI data request */\r
20 #define NMI             PORTBbits.RB6           /* Programmer switch */\r
21 \r
22 /* Some IO accessors. static inline somewhat broken with sdcc so\r
23  * I use macros... sad\r
24  */\r
25 #define spi_enable_fpga() do {          \\r
26         _F_CS0 = 0;                     \\r
27 } while(0)\r
28 \r
29 #define spi_disable_fpga() do {         \\r
30         _F_CS0 = 1;                     \\r
31 } while(0)\r
32 \r
33 #define spi_enable_osd() do {           \\r
34         _F_CS1 = 0;                     \\r
35 } while(0)\r
36 \r
37 #define spi_disable_osd() do {          \\r
38         _F_CS1 = 1;                     \\r
39 } while(0)\r
40 \r
41 #define spi_enable_sdcard() do {        \\r
42         _M_CD = 1;                      \\r
43         _M_CS = 0;                      \\r
44 } while(0)\r
45 \r
46 #define spi_disable_sdcard() do {       \\r
47         _M_CS = 1;                      \\r
48         do_spi(0xff);                   \\r
49         _M_CD = 0;                      \\r
50 } while(0)\r
51 \r
52 #define check_button(void) (!_SW0)\r
53 \r
54 #define reset_fpga() do {               \\r
55         PROG_B_VAL = 0;                 \\r
56         PROG_B = 0;                     \\r
57         PROG_B = 1;                     \\r
58 } while(0)\r
59 \r
60 #define diskled_on() do {               \\r
61         PORTBbits.RB4 = 1;              \\r
62 } while(0)\r
63 \r
64 #define diskled_off() do {              \\r
65         PORTBbits.RB4 = 0;              \\r
66 } while(0)\r
67 \r
68 /* Functions */\r
69 extern void hardware_init(void);\r
70 \r
71 extern unsigned short get_timer(unsigned short offset);\r
72 extern char check_timer(unsigned short t);\r
73 extern void wait_timer(unsigned short time);\r
74 \r
75 extern unsigned char do_spi(unsigned char data);\r
76 extern void shift_fpga(unsigned char data);\r
77 \r
78 /* Backbus interface defines */\r
79 #define BB_WRITE                0x80\r
80 #define BB_AUTOINC              0x40\r
81 \r
82 #define BB_REG_CTRL_BASE        0x00\r
83 #define BB_REG_CPU_BASE         0x10\r
84 #define BB_REG_MEM_BASE         0x20\r
85 #define BB_REG_IWM_BASE         0x28\r
86 #define BB_REG_SCSI_BASE        0x30\r
87 #define BB_REG_SCOPE_BASE       0x38\r
88 \r
89 \r
90 #endif /* __HARDWARE_H__ */\r
91 \r