mirror of
https://github.com/Wessel/PICAMP.git
synced 2026-07-25 17:30:51 +02:00
fix: Fix IOCB config bits
This commit is contained in:
@@ -1,23 +1,41 @@
|
||||
// Rotary encoder structs and enums
|
||||
#include "./picamp-rotary.h"
|
||||
|
||||
|
||||
#define PIC16887A
|
||||
#ifdef PIC16887A
|
||||
void __init_int(void) {
|
||||
void __init_int(IOCPin RBA, IOCPin RBB) {
|
||||
// Global interrupt enable
|
||||
INTCONbits.GIE = 1;
|
||||
// External interrupt enable
|
||||
INTCONbits.INTE = 1;
|
||||
// Peripheral interrupt enable
|
||||
// todo(wessel): Add PIR1, PIR2 registers
|
||||
INTCONbits.PEIE = 1;
|
||||
|
||||
// PORTB Change Interrupt Enable
|
||||
INTCONbits.RBIE = 1;
|
||||
|
||||
// todo(wessel): make modulair
|
||||
IOCBbits.IOCB4 = 1;
|
||||
IOCBbits.IOCB5 = 1;
|
||||
switch (RBA) {
|
||||
case IOCB0: IOCBbits.IOCB0 = 1; break;
|
||||
case IOCB1: IOCBbits.IOCB1 = 1; break;
|
||||
case IOCB2: IOCBbits.IOCB2 = 1; break;
|
||||
case IOCB3: IOCBbits.IOCB3 = 1; break;
|
||||
case IOCB4: IOCBbits.IOCB4 = 1; break;
|
||||
case IOCB5: IOCBbits.IOCB5 = 1; break;
|
||||
case IOCB6: IOCBbits.IOCB6 = 1; break;
|
||||
case IOCB7: IOCBbits.IOCB7 = 1; break;
|
||||
}
|
||||
|
||||
switch (RBB) {
|
||||
case IOCB0: IOCBbits.IOCB0 = 1; break;
|
||||
case IOCB1: IOCBbits.IOCB1 = 1; break;
|
||||
case IOCB2: IOCBbits.IOCB2 = 1; break;
|
||||
case IOCB3: IOCBbits.IOCB3 = 1; break;
|
||||
case IOCB4: IOCBbits.IOCB4 = 1; break;
|
||||
case IOCB5: IOCBbits.IOCB5 = 1; break;
|
||||
case IOCB6: IOCBbits.IOCB6 = 1; break;
|
||||
case IOCB7: IOCBbits.IOCB7 = 1; break;
|
||||
}
|
||||
|
||||
// Set interrupt edge
|
||||
OPTION_REGbits.INTEDG = 0;
|
||||
@@ -37,7 +55,7 @@ void __init_pin(volatile unsigned char* trisA, volatile unsigned char* trisB) {
|
||||
ANSELH = 0;
|
||||
}
|
||||
#elif PIC1829
|
||||
void __init_int(void) {}
|
||||
void __init_int(IOCPin RBA, IOCPin RBB) {}
|
||||
void __init_pin(volatile unsigned char* trisA, volatile unsigned char* trisB) {
|
||||
// Set `trisA` and `trisB` as inputs
|
||||
*trisA = 1;
|
||||
@@ -60,9 +78,9 @@ void __init_pin(volatile unsigned char* trisA, volatile unsigned char* trisB) {
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
void init_rotary(volatile unsigned char* trisA, volatile unsigned char* trisB) {
|
||||
void init_rotary(volatile unsigned char* trisA, volatile unsigned char* trisB, IOCPin RBA, IOCPin RBB) {
|
||||
// Initialize the interrupt
|
||||
__init_int();
|
||||
__init_int(RBA, RBB);
|
||||
|
||||
// Initialize the pins
|
||||
__init_pin(trisA, trisB);
|
||||
|
||||
@@ -8,9 +8,19 @@
|
||||
|
||||
// #[declarations:rotary]
|
||||
typedef enum { ROTATE_LEFT = 1, ROTATE_RIGHT = 2 } RotaryEncoderStates;
|
||||
typedef enum {
|
||||
IOCB0 = 0,
|
||||
IOCB1 = 1,
|
||||
IOCB2 = 2,
|
||||
IOCB3 = 3,
|
||||
IOCB4 = 4,
|
||||
IOCB5 = 5,
|
||||
IOCB6 = 6,
|
||||
IOCB7 = 7
|
||||
} IOCPin;
|
||||
|
||||
// #[declarations:functions]
|
||||
void parse_rotary(char REA, char REB, char* counter, char max, char min);
|
||||
void init_rotary(volatile unsigned char *trisA, volatile unsigned char *trisB);
|
||||
void init_rotary(volatile unsigned char* trisA, volatile unsigned char* trisB, IOCPin RBA, IOCPin RBB);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -8,9 +8,19 @@
|
||||
|
||||
// #[declarations:rotary]
|
||||
typedef enum { ROTATE_LEFT = 1, ROTATE_RIGHT = 2 } RotaryEncoderStates;
|
||||
typedef enum {
|
||||
IOCB0 = 0,
|
||||
IOCB1 = 1,
|
||||
IOCB2 = 2,
|
||||
IOCB3 = 3,
|
||||
IOCB4 = 4,
|
||||
IOCB5 = 5,
|
||||
IOCB6 = 6,
|
||||
IOCB7 = 7
|
||||
} IOCPin;
|
||||
|
||||
// #[declarations:functions]
|
||||
void parse_rotary(char A, char B, char* counter, char max, char min);
|
||||
void init_rotary(volatile unsigned char *trisA, volatile unsigned char *trisB);
|
||||
void parse_rotary(char REA, char REB, char* counter, char max, char min);
|
||||
void init_rotary(volatile unsigned char* trisA, volatile unsigned char* trisB, IOCPin RBA, IOCPin RBB);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -60,7 +60,7 @@ void pic_init(void) {
|
||||
// T0INT_ENABLED, RBINT_ENABLED, FALLING_EDGE };
|
||||
// init_int(int_config);
|
||||
|
||||
init_rotary(TRISBbits.TRISB4, TRISBbits.TRISB5);
|
||||
init_rotary(TRISBbits.TRISB4, TRISBbits.TRISB5, IOCB4, IOCB5);
|
||||
init_pot(ADC_AN07, TRISEbits.TRISE2);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user