Initial commit
This commit is contained in:
parent
e040a55846
commit
38bfd12b25
29
03-software/.gitignore
vendored
Normal file
29
03-software/.gitignore
vendored
Normal file
@ -0,0 +1,29 @@
|
||||
# .gitignore file
|
||||
|
||||
# MPLAB X IDE (Netbeans) specific
|
||||
~*.*
|
||||
build/
|
||||
debug/
|
||||
dist/
|
||||
disassembly/
|
||||
nbproject/private/
|
||||
nbproject/*.mk
|
||||
nbproject/*.bash
|
||||
nbproject/Makefile-genesis.properties
|
||||
|
||||
# Object files
|
||||
*.o
|
||||
*.ko
|
||||
*.obj
|
||||
*.elf
|
||||
|
||||
# Executables
|
||||
*.exe
|
||||
|
||||
|
||||
# KDE specific
|
||||
.directory
|
||||
|
||||
# Misc
|
||||
.svn
|
||||
*.bak
|
18
03-software/.vscode/c_cpp_properties.json
vendored
Normal file
18
03-software/.vscode/c_cpp_properties.json
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Linux",
|
||||
"includePath": [
|
||||
"${workspaceFolder}/**",
|
||||
"/opt/microchip/**"
|
||||
],
|
||||
"defines": [],
|
||||
"compilerPath": "/usr/bin/gcc",
|
||||
"cStandard": "c17",
|
||||
"cppStandard": "gnu++17",
|
||||
"intelliSenseMode": "linux-gcc-x64",
|
||||
"configurationProvider": "ms-vscode.makefile-tools"
|
||||
}
|
||||
],
|
||||
"version": 4
|
||||
}
|
113
03-software/Makefile
Normal file
113
03-software/Makefile
Normal file
@ -0,0 +1,113 @@
|
||||
#
|
||||
# There exist several targets which are by default empty and which can be
|
||||
# used for execution of your targets. These targets are usually executed
|
||||
# before and after some main targets. They are:
|
||||
#
|
||||
# .build-pre: called before 'build' target
|
||||
# .build-post: called after 'build' target
|
||||
# .clean-pre: called before 'clean' target
|
||||
# .clean-post: called after 'clean' target
|
||||
# .clobber-pre: called before 'clobber' target
|
||||
# .clobber-post: called after 'clobber' target
|
||||
# .all-pre: called before 'all' target
|
||||
# .all-post: called after 'all' target
|
||||
# .help-pre: called before 'help' target
|
||||
# .help-post: called after 'help' target
|
||||
#
|
||||
# Targets beginning with '.' are not intended to be called on their own.
|
||||
#
|
||||
# Main targets can be executed directly, and they are:
|
||||
#
|
||||
# build build a specific configuration
|
||||
# clean remove built files from a configuration
|
||||
# clobber remove all built files
|
||||
# all build all configurations
|
||||
# help print help mesage
|
||||
#
|
||||
# Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and
|
||||
# .help-impl are implemented in nbproject/makefile-impl.mk.
|
||||
#
|
||||
# Available make variables:
|
||||
#
|
||||
# CND_BASEDIR base directory for relative paths
|
||||
# CND_DISTDIR default top distribution directory (build artifacts)
|
||||
# CND_BUILDDIR default top build directory (object files, ...)
|
||||
# CONF name of current configuration
|
||||
# CND_ARTIFACT_DIR_${CONF} directory of build artifact (current configuration)
|
||||
# CND_ARTIFACT_NAME_${CONF} name of build artifact (current configuration)
|
||||
# CND_ARTIFACT_PATH_${CONF} path to build artifact (current configuration)
|
||||
# CND_PACKAGE_DIR_${CONF} directory of package (current configuration)
|
||||
# CND_PACKAGE_NAME_${CONF} name of package (current configuration)
|
||||
# CND_PACKAGE_PATH_${CONF} path to package (current configuration)
|
||||
#
|
||||
# NOCDDL
|
||||
|
||||
|
||||
# Environment
|
||||
MKDIR=mkdir
|
||||
CP=cp
|
||||
CCADMIN=CCadmin
|
||||
RANLIB=ranlib
|
||||
|
||||
|
||||
# build
|
||||
build: .build-post
|
||||
|
||||
.build-pre:
|
||||
# Add your pre 'build' code here...
|
||||
|
||||
.build-post: .build-impl
|
||||
# Add your post 'build' code here...
|
||||
|
||||
|
||||
# clean
|
||||
clean: .clean-post
|
||||
|
||||
.clean-pre:
|
||||
# Add your pre 'clean' code here...
|
||||
# WARNING: the IDE does not call this target since it takes a long time to
|
||||
# simply run make. Instead, the IDE removes the configuration directories
|
||||
# under build and dist directly without calling make.
|
||||
# This target is left here so people can do a clean when running a clean
|
||||
# outside the IDE.
|
||||
|
||||
.clean-post: .clean-impl
|
||||
# Add your post 'clean' code here...
|
||||
|
||||
|
||||
# clobber
|
||||
clobber: .clobber-post
|
||||
|
||||
.clobber-pre:
|
||||
# Add your pre 'clobber' code here...
|
||||
|
||||
.clobber-post: .clobber-impl
|
||||
# Add your post 'clobber' code here...
|
||||
|
||||
|
||||
# all
|
||||
all: .all-post
|
||||
|
||||
.all-pre:
|
||||
# Add your pre 'all' code here...
|
||||
|
||||
.all-post: .all-impl
|
||||
# Add your post 'all' code here...
|
||||
|
||||
|
||||
# help
|
||||
help: .help-post
|
||||
|
||||
.help-pre:
|
||||
# Add your pre 'help' code here...
|
||||
|
||||
.help-post: .help-impl
|
||||
# Add your post 'help' code here...
|
||||
|
||||
|
||||
|
||||
# include project implementation makefile
|
||||
include nbproject/Makefile-impl.mk
|
||||
|
||||
# include project make variables
|
||||
include nbproject/Makefile-variables.mk
|
44
03-software/ch/kb28/blinkerProject/app/factory/factory.c
Executable file
44
03-software/ch/kb28/blinkerProject/app/factory/factory.c
Executable file
@ -0,0 +1,44 @@
|
||||
#include "factory.h"
|
||||
|
||||
|
||||
//the factory object containing all objects of our system
|
||||
static Factory theFactory;
|
||||
|
||||
|
||||
//all the getters
|
||||
LED* l()
|
||||
{
|
||||
return &theFactory.l_;
|
||||
}
|
||||
LED* l2(){
|
||||
return &theFactory.l2_;
|
||||
}
|
||||
|
||||
LEDBlinker* lb() {
|
||||
return &theFactory.lb_;
|
||||
}
|
||||
|
||||
LEDBlinker* lb2() {
|
||||
return &theFactory.lb2_;
|
||||
}
|
||||
|
||||
//initialize all objects
|
||||
void Factory_init()
|
||||
{
|
||||
LED_init(l(),LID);
|
||||
LED_init(l2(),2);
|
||||
LED_initHW(l());
|
||||
LED_initHW(l2());
|
||||
}
|
||||
|
||||
//connect objects if required
|
||||
void Factory_build()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
//start all state machines
|
||||
void Factory_start() {
|
||||
LEDBlinker_startBehaviour(lb());
|
||||
LEDBlinker_startBehaviour(lb2());
|
||||
}
|
36
03-software/ch/kb28/blinkerProject/app/factory/factory.h
Executable file
36
03-software/ch/kb28/blinkerProject/app/factory/factory.h
Executable file
@ -0,0 +1,36 @@
|
||||
/* this is the Factory class */
|
||||
|
||||
|
||||
#ifndef FACTORY_ONCE
|
||||
#define FACTORY_ONCE
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#include "../../board/led/led.h"
|
||||
#include "../ledblinker.h"
|
||||
#define LID 5
|
||||
|
||||
|
||||
struct Factory_
|
||||
{
|
||||
LED l_;
|
||||
LED l2_;
|
||||
LEDBlinker lb_;
|
||||
LEDBlinker lb2_;
|
||||
};
|
||||
|
||||
|
||||
typedef struct Factory_ Factory;
|
||||
|
||||
void Factory_init();
|
||||
void Factory_build();
|
||||
void Factory_start();
|
||||
|
||||
//these are global getters for our objects
|
||||
LED* l();
|
||||
LED* l2();
|
||||
LEDBlinker* lb();
|
||||
LEDBlinker* lb2();
|
||||
|
||||
#endif
|
68
03-software/ch/kb28/blinkerProject/app/lebblinker.c
Normal file
68
03-software/ch/kb28/blinkerProject/app/lebblinker.c
Normal file
@ -0,0 +1,68 @@
|
||||
#include "ledblinker.h"
|
||||
#include "factory/factory.h"
|
||||
#include "../board/led/led.h"
|
||||
|
||||
void LEDBlinker_init(LEDBlinker* me)
|
||||
{
|
||||
me->state = ST_LBINIT;
|
||||
}
|
||||
|
||||
void LEDBlinker_startBehaviour(LEDBlinker* me)
|
||||
{
|
||||
POST(me, &LEDBlinker_processEvent, evLBInit,0,0);
|
||||
}
|
||||
|
||||
bool LEDBlinker_processEvent(Event* ev)
|
||||
{
|
||||
bool processed = false;
|
||||
LEDBlinker* me = (LEDBlinker*)Event_getTarget(ev);
|
||||
LBSTATES oldState = me->state;
|
||||
evIDT evid = Event_getId(ev);
|
||||
|
||||
switch (me->state)
|
||||
{
|
||||
case ST_LBINIT:
|
||||
if (evid == evLBInit)
|
||||
{
|
||||
me->state = ST_LBOFF;
|
||||
}
|
||||
break;
|
||||
case ST_LBOFF:
|
||||
if (evid == evLBTMOn)
|
||||
{
|
||||
me->state = ST_LBON;
|
||||
}
|
||||
break;
|
||||
case ST_LBON:
|
||||
if (evid == evLBTMOff)
|
||||
{
|
||||
me->state = ST_LBOFF;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (oldState != me->state)
|
||||
{
|
||||
switch (me->state)
|
||||
{
|
||||
case ST_LBINIT:
|
||||
break;
|
||||
case ST_LBOFF:
|
||||
LED_off(l());
|
||||
LED_off(l2());
|
||||
POST(me, &LEDBlinker_processEvent, evLBTMOn,TMOFF,0);
|
||||
break;
|
||||
case ST_LBON:
|
||||
LED_on(l());
|
||||
LED_on(l2());
|
||||
POST(me, &LEDBlinker_processEvent, evLBTMOff,TMON,0);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
processed = true;
|
||||
}
|
||||
return processed;
|
||||
}
|
42
03-software/ch/kb28/blinkerProject/app/ledblinker.h
Normal file
42
03-software/ch/kb28/blinkerProject/app/ledblinker.h
Normal file
@ -0,0 +1,42 @@
|
||||
/*
|
||||
* File: ledblinker.h
|
||||
* Author: rim
|
||||
*
|
||||
* Created on May 14, 2023, 9:58 AM
|
||||
*/
|
||||
|
||||
#ifndef LEDBLINKER_H
|
||||
#define LEDBLINKER_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "../xf/xf.h"
|
||||
|
||||
enum LBSTATES_ {ST_LBINIT, ST_LBOFF, ST_LBON};
|
||||
enum LBEVENTS_ {evLBInit=100, evLBTMOff, evLBTMOn};
|
||||
typedef enum LBSTATES_ LBSTATES;
|
||||
typedef enum LBEVENTS_ LBEVENTS;
|
||||
|
||||
struct LEDBlinker_ {
|
||||
LBSTATES state;
|
||||
};
|
||||
|
||||
typedef struct LEDBlinker_ LEDBlinker;
|
||||
|
||||
#define TMON 500
|
||||
#define TMOFF 1000
|
||||
|
||||
|
||||
void LEDBlinker_init(LEDBlinker* me);
|
||||
|
||||
void LEDBlinker_startBehaviour(LEDBlinker* me);
|
||||
bool LEDBlinker_processEvent(Event* ev);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* LEDBLINKER_H */
|
||||
|
47
03-software/ch/kb28/blinkerProject/app/main.c
Normal file
47
03-software/ch/kb28/blinkerProject/app/main.c
Normal file
@ -0,0 +1,47 @@
|
||||
|
||||
#include "../mcc_generated_files/mcc.h"
|
||||
#include "../board/led/led.h"
|
||||
#include "../app/factory/factory.h"
|
||||
#include "../xf/xf.h"
|
||||
|
||||
bool test(Event* ev);
|
||||
|
||||
bool test(Event* ev) {
|
||||
static bool on = true;
|
||||
if (on == true){
|
||||
LED_on(l());
|
||||
on = false;
|
||||
} else {
|
||||
LED_off(l());
|
||||
on = true;
|
||||
}
|
||||
POST(NULL,test, 2, 500, 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void main(void)
|
||||
{
|
||||
// Initialize the device
|
||||
SYSTEM_Initialize();
|
||||
|
||||
// Enable the Global Interrupts
|
||||
INTERRUPT_GlobalInterruptEnable();
|
||||
//INTERRUPT_GlobalInterruptDisable();
|
||||
//INTERRUPT_PeripheralInterruptEnable();
|
||||
//INTERRUPT_PeripheralInterruptDisable();
|
||||
|
||||
XF_init();
|
||||
|
||||
Factory_init();
|
||||
Factory_build();
|
||||
Factory_start();
|
||||
|
||||
TMR0_SetInterruptHandler(XF_decrementAndQueueTimers);
|
||||
|
||||
|
||||
while (1)
|
||||
{
|
||||
XF_executeOnce();
|
||||
}
|
||||
}
|
92
03-software/ch/kb28/blinkerProject/board/led/led.c
Normal file
92
03-software/ch/kb28/blinkerProject/board/led/led.c
Normal file
@ -0,0 +1,92 @@
|
||||
#include "led.h"
|
||||
#include "../../mcc_generated_files/pin_manager.h"
|
||||
|
||||
void LED_init(LED* me, uint8_t id)
|
||||
{
|
||||
me->id = id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Initialize the Driver
|
||||
*
|
||||
*/
|
||||
void LED_initHW(LED* me)
|
||||
{
|
||||
LED_off(me);
|
||||
}
|
||||
|
||||
void LED_on(LED* me)
|
||||
{
|
||||
switch (me->id)
|
||||
{
|
||||
case 1:
|
||||
OUTPUT1_SetHigh();
|
||||
break;
|
||||
case 2:
|
||||
OUTPUT2_SetHigh();
|
||||
break;
|
||||
case 3:
|
||||
OUTPUT3_SetHigh();
|
||||
break;
|
||||
case 4:
|
||||
OUTPUT4_SetHigh();
|
||||
break;
|
||||
case 5:
|
||||
OUTPUT5_SetHigh();
|
||||
break;
|
||||
case 6:
|
||||
OUTPUT6_SetHigh();
|
||||
break;
|
||||
case 7:
|
||||
OUTPUT7_SetHigh();
|
||||
break;
|
||||
case 8:
|
||||
OUTPUT8_SetHigh();
|
||||
break;
|
||||
case 9:
|
||||
OUTPUT9_SetHigh();
|
||||
break;
|
||||
case 10:
|
||||
OUTPUT10_SetHigh();
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void LED_off(LED* me)
|
||||
{
|
||||
switch (me->id)
|
||||
{
|
||||
case 1:
|
||||
OUTPUT1_SetLow();
|
||||
break;
|
||||
case 2:
|
||||
OUTPUT2_SetLow();
|
||||
break;
|
||||
case 3:
|
||||
OUTPUT3_SetLow();
|
||||
break;
|
||||
case 4:
|
||||
OUTPUT4_SetLow();
|
||||
break;
|
||||
case 5:
|
||||
OUTPUT5_SetLow();
|
||||
break;
|
||||
case 6:
|
||||
OUTPUT6_SetLow();
|
||||
break;
|
||||
case 7:
|
||||
OUTPUT7_SetLow();
|
||||
break;
|
||||
case 8:
|
||||
OUTPUT8_SetLow();
|
||||
break;
|
||||
case 9:
|
||||
OUTPUT9_SetLow();
|
||||
break;
|
||||
case 10:
|
||||
OUTPUT10_SetLow();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
26
03-software/ch/kb28/blinkerProject/board/led/led.h
Normal file
26
03-software/ch/kb28/blinkerProject/board/led/led.h
Normal file
@ -0,0 +1,26 @@
|
||||
/*
|
||||
* File: led.h
|
||||
* Author: rim
|
||||
*
|
||||
* Created on May 15, 2023, 7:56 AM
|
||||
*/
|
||||
|
||||
#ifndef LED_H
|
||||
#define LED_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
struct LED_
|
||||
{
|
||||
uint8_t id;
|
||||
};
|
||||
|
||||
typedef struct LED_ LED;
|
||||
|
||||
void LED_init(LED* me, uint8_t id);
|
||||
void LED_initHW(LED* me);
|
||||
void LED_on(LED* me);
|
||||
void LED_off(LED* me);
|
||||
|
||||
#endif /* LED_H */
|
||||
|
@ -0,0 +1,117 @@
|
||||
/**
|
||||
@Generated PIC10 / PIC12 / PIC16 / PIC18 MCUs Source File
|
||||
|
||||
@Company:
|
||||
Microchip Technology Inc.
|
||||
|
||||
@File Name:
|
||||
mcc.c
|
||||
|
||||
@Summary:
|
||||
This is the device_config.c file generated using PIC10 / PIC12 / PIC16 / PIC18 MCUs
|
||||
|
||||
@Description:
|
||||
This header file provides implementations for driver APIs for all modules selected in the GUI.
|
||||
Generation Information :
|
||||
Product Revision : PIC10 / PIC12 / PIC16 / PIC18 MCUs - 1.81.8
|
||||
Device : PIC18F86K22
|
||||
Driver Version : 2.00
|
||||
The generated drivers are tested against the following:
|
||||
Compiler : XC8 2.36 and above or later
|
||||
MPLAB : MPLAB X 6.00
|
||||
*/
|
||||
|
||||
/*
|
||||
(c) 2018 Microchip Technology Inc. and its subsidiaries.
|
||||
|
||||
Subject to your compliance with these terms, you may use Microchip software and any
|
||||
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
|
||||
license terms applicable to your use of third party software (including open source software) that
|
||||
may accompany Microchip software.
|
||||
|
||||
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
|
||||
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
|
||||
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE.
|
||||
|
||||
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
|
||||
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
|
||||
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
|
||||
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
|
||||
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
|
||||
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
|
||||
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
// Configuration bits: selected in the GUI
|
||||
|
||||
// CONFIG1L
|
||||
#pragma config RETEN = ON // VREG Sleep Enable bit->Enabled
|
||||
#pragma config INTOSCSEL = HIGH // LF-INTOSC Low-power Enable bit->LF-INTOSC in High-power mode during Sleep
|
||||
#pragma config SOSCSEL = DIG // SOSC Power Selection and mode Configuration bits->Digital (SCLKI) mode
|
||||
#pragma config XINST = OFF // Extended Instruction Set->Disabled
|
||||
|
||||
// CONFIG1H
|
||||
#pragma config FOSC = INTIO2 // Oscillator->Internal RC oscillator
|
||||
#pragma config PLLCFG = OFF // PLL x4 Enable bit->Disabled
|
||||
#pragma config FCMEN = OFF // Fail-Safe Clock Monitor->Disabled
|
||||
#pragma config IESO = OFF // Internal External Oscillator Switch Over Mode->Disabled
|
||||
|
||||
// CONFIG2L
|
||||
#pragma config PWRTEN = OFF // Power Up Timer->Disabled
|
||||
#pragma config BOREN = SBORDIS // Brown Out Detect->Enabled in hardware, SBOREN disabled
|
||||
#pragma config BORV = 3 // Brown-out Reset Voltage bits->1.8V
|
||||
#pragma config BORPWR = ZPBORMV // BORMV Power level->ZPBORMV instead of BORMV is selected
|
||||
|
||||
// CONFIG2H
|
||||
#pragma config WDTEN = OFF // Watchdog Timer->WDT disabled in hardware; SWDTEN bit disabled
|
||||
#pragma config WDTPS = 1048576 // Watchdog Postscaler->1:1048576
|
||||
|
||||
// CONFIG3L
|
||||
#pragma config RTCOSC = SOSCREF // RTCC Clock Select->RTCC uses SOSC
|
||||
#pragma config EASHFT = ON // External Address Shift bit->Address shifting enabled
|
||||
#pragma config ABW = MM // Address Bus Width Select bits->8-bit address bus
|
||||
#pragma config BW = 16 // Data Bus Width->16-bit external bus mode
|
||||
#pragma config WAIT = OFF // External Bus Wait->Disabled
|
||||
|
||||
// CONFIG3H
|
||||
#pragma config CCP2MX = PORTC // CCP2 Mux->RC1
|
||||
#pragma config ECCPMX = PORTE // ECCP Mux->Enhanced CCP1/3 [P1B/P1C/P3B/P3C] muxed with RE6/RE5/RE4/RE3
|
||||
#pragma config MSSPMSK = MSK7 // MSSP address masking->7 Bit address masking mode
|
||||
#pragma config MCLRE = ON // Master Clear Enable->MCLR Enabled, RG5 Disabled
|
||||
|
||||
// CONFIG4L
|
||||
#pragma config STVREN = ON // Stack Overflow Reset->Enabled
|
||||
#pragma config BBSIZ = BB2K // Boot Block Size->2K word Boot Block size
|
||||
#pragma config DEBUG = OFF // Background Debug->Disabled
|
||||
|
||||
// CONFIG5L
|
||||
#pragma config CP0 = OFF // Code Protect 00800-03FFF->Disabled
|
||||
#pragma config CP1 = OFF // Code Protect 04000-07FFF->Disabled
|
||||
#pragma config CP2 = OFF // Code Protect 08000-0BFFF->Disabled
|
||||
#pragma config CP3 = OFF // Code Protect 0C000-0FFFF->Disabled
|
||||
|
||||
// CONFIG5H
|
||||
#pragma config CPB = OFF // Code Protect Boot->Disabled
|
||||
#pragma config CPD = OFF // Data EE Read Protect->Disabled
|
||||
|
||||
// CONFIG6L
|
||||
#pragma config WRT0 = OFF // Table Write Protect 00800-03FFF->Disabled
|
||||
#pragma config WRT1 = OFF // Table Write Protect 04000-07FFF->Disabled
|
||||
#pragma config WRT2 = OFF // Table Write Protect 08000-0BFFF->Disabled
|
||||
#pragma config WRT3 = OFF // Table Write Protect 0C000-0FFFF->Disabled
|
||||
|
||||
// CONFIG6H
|
||||
#pragma config WRTC = OFF // Config. Write Protect->Disabled
|
||||
#pragma config WRTB = OFF // Table Write Protect Boot->Disabled
|
||||
#pragma config WRTD = OFF // Data EE Write Protect->Disabled
|
||||
|
||||
// CONFIG7L
|
||||
#pragma config EBRT0 = OFF // Table Read Protect 00800-03FFF->Disabled
|
||||
#pragma config EBRT1 = OFF // Table Read Protect 04000-07FFF->Disabled
|
||||
#pragma config EBRT2 = OFF // Table Read Protect 08000-0BFFF->Disabled
|
||||
#pragma config EBRT3 = OFF // Table Read Protect 0C000-0FFFF->Disabled
|
||||
|
||||
// CONFIG7H
|
||||
#pragma config EBRTB = OFF // Table Read Protect Boot->Disabled
|
@ -0,0 +1,55 @@
|
||||
/**
|
||||
@Generated PIC10 / PIC12 / PIC16 / PIC18 MCUs Header File
|
||||
|
||||
@Company:
|
||||
Microchip Technology Inc.
|
||||
|
||||
@File Name:
|
||||
mcc.c
|
||||
|
||||
@Summary:
|
||||
This is the device_config.h file generated using PIC10 / PIC12 / PIC16 / PIC18 MCUs
|
||||
|
||||
@Description:
|
||||
This header file provides implementations for driver APIs for all modules selected in the GUI.
|
||||
Generation Information :
|
||||
Product Revision : PIC10 / PIC12 / PIC16 / PIC18 MCUs - 1.81.8
|
||||
Device : PIC18F86K22
|
||||
Driver Version : 2.00
|
||||
The generated drivers are tested against the following:
|
||||
Compiler : XC8 2.36 and above or later
|
||||
MPLAB : MPLAB X 6.00
|
||||
*/
|
||||
|
||||
/*
|
||||
(c) 2018 Microchip Technology Inc. and its subsidiaries.
|
||||
|
||||
Subject to your compliance with these terms, you may use Microchip software and any
|
||||
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
|
||||
license terms applicable to your use of third party software (including open source software) that
|
||||
may accompany Microchip software.
|
||||
|
||||
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
|
||||
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
|
||||
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE.
|
||||
|
||||
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
|
||||
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
|
||||
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
|
||||
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
|
||||
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
|
||||
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
|
||||
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef DEVICE_CONFIG_H
|
||||
#define DEVICE_CONFIG_H
|
||||
|
||||
#define _XTAL_FREQ 64000000
|
||||
|
||||
#endif /* DEVICE_CONFIG_H */
|
||||
/**
|
||||
End of File
|
||||
*/
|
@ -0,0 +1,72 @@
|
||||
/**
|
||||
Generated Interrupt Manager Source File
|
||||
|
||||
@Company:
|
||||
Microchip Technology Inc.
|
||||
|
||||
@File Name:
|
||||
interrupt_manager.c
|
||||
|
||||
@Summary:
|
||||
This is the Interrupt Manager file generated using PIC10 / PIC12 / PIC16 / PIC18 MCUs
|
||||
|
||||
@Description:
|
||||
This header file provides implementations for global interrupt handling.
|
||||
For individual peripheral handlers please see the peripheral driver for
|
||||
all modules selected in the GUI.
|
||||
Generation Information :
|
||||
Product Revision : PIC10 / PIC12 / PIC16 / PIC18 MCUs - 1.81.8
|
||||
Device : PIC18F86K22
|
||||
Driver Version : 2.04
|
||||
The generated drivers are tested against the following:
|
||||
Compiler : XC8 2.36 and above or later
|
||||
MPLAB : MPLAB X 6.00
|
||||
*/
|
||||
|
||||
/*
|
||||
(c) 2018 Microchip Technology Inc. and its subsidiaries.
|
||||
|
||||
Subject to your compliance with these terms, you may use Microchip software and any
|
||||
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
|
||||
license terms applicable to your use of third party software (including open source software) that
|
||||
may accompany Microchip software.
|
||||
|
||||
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
|
||||
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
|
||||
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE.
|
||||
|
||||
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
|
||||
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
|
||||
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
|
||||
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
|
||||
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
|
||||
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
|
||||
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "interrupt_manager.h"
|
||||
#include "mcc.h"
|
||||
|
||||
void INTERRUPT_Initialize (void)
|
||||
{
|
||||
// Disable Interrupt Priority Vectors (16CXXX Compatibility Mode)
|
||||
RCONbits.IPEN = 0;
|
||||
}
|
||||
|
||||
void __interrupt() INTERRUPT_InterruptManager (void)
|
||||
{
|
||||
// interrupt handler
|
||||
if(INTCONbits.TMR0IE == 1 && INTCONbits.TMR0IF == 1)
|
||||
{
|
||||
TMR0_ISR();
|
||||
}
|
||||
else
|
||||
{
|
||||
//Unhandled Interrupt
|
||||
}
|
||||
}
|
||||
/**
|
||||
End of File
|
||||
*/
|
@ -0,0 +1,115 @@
|
||||
/**
|
||||
Generated Interrupt Manager Header File
|
||||
|
||||
@Company:
|
||||
Microchip Technology Inc.
|
||||
|
||||
@File Name:
|
||||
interrupt_manager.h
|
||||
|
||||
@Summary:
|
||||
This is the Interrupt Manager file generated using PIC10 / PIC12 / PIC16 / PIC18 MCUs
|
||||
|
||||
@Description:
|
||||
This header file provides implementations for global interrupt handling.
|
||||
For individual peripheral handlers please see the peripheral driver for
|
||||
all modules selected in the GUI.
|
||||
Generation Information :
|
||||
Product Revision : PIC10 / PIC12 / PIC16 / PIC18 MCUs - 1.81.8
|
||||
Device : PIC18F86K22
|
||||
Driver Version : 2.03
|
||||
The generated drivers are tested against the following:
|
||||
Compiler : XC8 2.36 and above or later
|
||||
MPLAB : MPLAB X 6.00
|
||||
*/
|
||||
|
||||
/*
|
||||
(c) 2018 Microchip Technology Inc. and its subsidiaries.
|
||||
|
||||
Subject to your compliance with these terms, you may use Microchip software and any
|
||||
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
|
||||
license terms applicable to your use of third party software (including open source software) that
|
||||
may accompany Microchip software.
|
||||
|
||||
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
|
||||
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
|
||||
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE.
|
||||
|
||||
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
|
||||
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
|
||||
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
|
||||
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
|
||||
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
|
||||
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
|
||||
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef INTERRUPT_MANAGER_H
|
||||
#define INTERRUPT_MANAGER_H
|
||||
|
||||
|
||||
/**
|
||||
* @Param
|
||||
none
|
||||
* @Returns
|
||||
none
|
||||
* @Description
|
||||
This macro will enable global interrupts.
|
||||
* @Example
|
||||
INTERRUPT_GlobalInterruptEnable();
|
||||
*/
|
||||
#define INTERRUPT_GlobalInterruptEnable() (INTCONbits.GIE = 1)
|
||||
|
||||
/**
|
||||
* @Param
|
||||
none
|
||||
* @Returns
|
||||
none
|
||||
* @Description
|
||||
This macro will disable global interrupts.
|
||||
* @Example
|
||||
INTERRUPT_GlobalInterruptDisable();
|
||||
*/
|
||||
#define INTERRUPT_GlobalInterruptDisable() (INTCONbits.GIE = 0)
|
||||
/**
|
||||
* @Param
|
||||
none
|
||||
* @Returns
|
||||
none
|
||||
* @Description
|
||||
This macro will enable peripheral interrupts.
|
||||
* @Example
|
||||
INTERRUPT_PeripheralInterruptEnable();
|
||||
*/
|
||||
#define INTERRUPT_PeripheralInterruptEnable() (INTCONbits.PEIE = 1)
|
||||
|
||||
/**
|
||||
* @Param
|
||||
none
|
||||
* @Returns
|
||||
none
|
||||
* @Description
|
||||
This macro will disable peripheral interrupts.
|
||||
* @Example
|
||||
INTERRUPT_PeripheralInterruptDisable();
|
||||
*/
|
||||
#define INTERRUPT_PeripheralInterruptDisable() (INTCONbits.PEIE = 0)
|
||||
|
||||
/**
|
||||
* @Param
|
||||
none
|
||||
* @Returns
|
||||
none
|
||||
* @Description
|
||||
Initializes PIC18 peripheral interrupt priorities; enables/disables priority vectors
|
||||
* @Example
|
||||
INTERRUPT_Initialize();
|
||||
*/
|
||||
void INTERRUPT_Initialize (void);
|
||||
|
||||
#endif // INTERRUPT_MANAGER_H
|
||||
/**
|
||||
End of File
|
||||
*/
|
74
03-software/ch/kb28/blinkerProject/mcc_generated_files/mcc.c
Normal file
74
03-software/ch/kb28/blinkerProject/mcc_generated_files/mcc.c
Normal file
@ -0,0 +1,74 @@
|
||||
/**
|
||||
@Generated PIC10 / PIC12 / PIC16 / PIC18 MCUs Source File
|
||||
|
||||
@Company:
|
||||
Microchip Technology Inc.
|
||||
|
||||
@File Name:
|
||||
mcc.c
|
||||
|
||||
@Summary:
|
||||
This is the mcc.c file generated using PIC10 / PIC12 / PIC16 / PIC18 MCUs
|
||||
|
||||
@Description:
|
||||
This header file provides implementations for driver APIs for all modules selected in the GUI.
|
||||
Generation Information :
|
||||
Product Revision : PIC10 / PIC12 / PIC16 / PIC18 MCUs - 1.81.8
|
||||
Device : PIC18F86K22
|
||||
Driver Version : 2.00
|
||||
The generated drivers are tested against the following:
|
||||
Compiler : XC8 2.36 and above or later
|
||||
MPLAB : MPLAB X 6.00
|
||||
*/
|
||||
|
||||
/*
|
||||
(c) 2018 Microchip Technology Inc. and its subsidiaries.
|
||||
|
||||
Subject to your compliance with these terms, you may use Microchip software and any
|
||||
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
|
||||
license terms applicable to your use of third party software (including open source software) that
|
||||
may accompany Microchip software.
|
||||
|
||||
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
|
||||
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
|
||||
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE.
|
||||
|
||||
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
|
||||
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
|
||||
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
|
||||
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
|
||||
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
|
||||
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
|
||||
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "mcc.h"
|
||||
|
||||
|
||||
void SYSTEM_Initialize(void)
|
||||
{
|
||||
|
||||
INTERRUPT_Initialize();
|
||||
PIN_MANAGER_Initialize();
|
||||
OSCILLATOR_Initialize();
|
||||
TMR0_Initialize();
|
||||
}
|
||||
|
||||
void OSCILLATOR_Initialize(void)
|
||||
{
|
||||
// SCS FOSC; IDLEN disabled; IRCF 16MHz_HF;
|
||||
OSCCON = 0x70;
|
||||
// SOSCGO disabled; MFIOSEL disabled;
|
||||
OSCCON2 = 0x00;
|
||||
// INTSRC INTRC; PLLEN enabled; TUN 0;
|
||||
OSCTUNE = 0x40;
|
||||
// ROSEL System Clock(FOSC); ROON disabled; ROSSLP Disabled in Sleep mode; RODIV Fosc;
|
||||
REFOCON = 0x00;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
End of File
|
||||
*/
|
89
03-software/ch/kb28/blinkerProject/mcc_generated_files/mcc.h
Normal file
89
03-software/ch/kb28/blinkerProject/mcc_generated_files/mcc.h
Normal file
@ -0,0 +1,89 @@
|
||||
/**
|
||||
@Generated PIC10 / PIC12 / PIC16 / PIC18 MCUs Header File
|
||||
|
||||
@Company:
|
||||
Microchip Technology Inc.
|
||||
|
||||
@File Name:
|
||||
mcc.h
|
||||
|
||||
@Summary:
|
||||
This is the mcc.h file generated using PIC10 / PIC12 / PIC16 / PIC18 MCUs
|
||||
|
||||
@Description:
|
||||
This header file provides implementations for driver APIs for all modules selected in the GUI.
|
||||
Generation Information :
|
||||
Product Revision : PIC10 / PIC12 / PIC16 / PIC18 MCUs - 1.81.8
|
||||
Device : PIC18F86K22
|
||||
Driver Version : 2.00
|
||||
The generated drivers are tested against the following:
|
||||
Compiler : XC8 2.36 and above or later
|
||||
MPLAB : MPLAB X 6.00
|
||||
*/
|
||||
|
||||
/*
|
||||
(c) 2018 Microchip Technology Inc. and its subsidiaries.
|
||||
|
||||
Subject to your compliance with these terms, you may use Microchip software and any
|
||||
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
|
||||
license terms applicable to your use of third party software (including open source software) that
|
||||
may accompany Microchip software.
|
||||
|
||||
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
|
||||
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
|
||||
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE.
|
||||
|
||||
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
|
||||
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
|
||||
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
|
||||
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
|
||||
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
|
||||
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
|
||||
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef MCC_H
|
||||
#define MCC_H
|
||||
#include <xc.h>
|
||||
#include "device_config.h"
|
||||
#include "pin_manager.h"
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <conio.h>
|
||||
#include "interrupt_manager.h"
|
||||
#include "tmr0.h"
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @Param
|
||||
none
|
||||
* @Returns
|
||||
none
|
||||
* @Description
|
||||
Initializes the device to the default states configured in the
|
||||
* MCC GUI
|
||||
* @Example
|
||||
SYSTEM_Initialize(void);
|
||||
*/
|
||||
void SYSTEM_Initialize(void);
|
||||
|
||||
/**
|
||||
* @Param
|
||||
none
|
||||
* @Returns
|
||||
none
|
||||
* @Description
|
||||
Initializes the oscillator to the default states configured in the
|
||||
* MCC GUI
|
||||
* @Example
|
||||
OSCILLATOR_Initialize(void);
|
||||
*/
|
||||
void OSCILLATOR_Initialize(void);
|
||||
|
||||
#endif /* MCC_H */
|
||||
/**
|
||||
End of File
|
||||
*/
|
@ -0,0 +1,109 @@
|
||||
/**
|
||||
Generated Pin Manager File
|
||||
|
||||
Company:
|
||||
Microchip Technology Inc.
|
||||
|
||||
File Name:
|
||||
pin_manager.c
|
||||
|
||||
Summary:
|
||||
This is the Pin Manager file generated using PIC10 / PIC12 / PIC16 / PIC18 MCUs
|
||||
|
||||
Description:
|
||||
This header file provides implementations for pin APIs for all pins selected in the GUI.
|
||||
Generation Information :
|
||||
Product Revision : PIC10 / PIC12 / PIC16 / PIC18 MCUs - 1.81.8
|
||||
Device : PIC18F86K22
|
||||
Driver Version : 2.11
|
||||
The generated drivers are tested against the following:
|
||||
Compiler : XC8 2.36 and above
|
||||
MPLAB : MPLAB X 6.00
|
||||
|
||||
Copyright (c) 2013 - 2015 released Microchip Technology Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
/*
|
||||
(c) 2018 Microchip Technology Inc. and its subsidiaries.
|
||||
|
||||
Subject to your compliance with these terms, you may use Microchip software and any
|
||||
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
|
||||
license terms applicable to your use of third party software (including open source software) that
|
||||
may accompany Microchip software.
|
||||
|
||||
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
|
||||
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
|
||||
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE.
|
||||
|
||||
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
|
||||
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
|
||||
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
|
||||
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
|
||||
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
|
||||
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
|
||||
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "pin_manager.h"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void PIN_MANAGER_Initialize(void)
|
||||
{
|
||||
/**
|
||||
LATx registers
|
||||
*/
|
||||
LATE = 0x00;
|
||||
LATD = 0x00;
|
||||
LATA = 0x00;
|
||||
LATF = 0x00;
|
||||
LATB = 0x00;
|
||||
LATG = 0x00;
|
||||
LATC = 0x00;
|
||||
LATH = 0x00;
|
||||
|
||||
/**
|
||||
TRISx registers
|
||||
*/
|
||||
TRISE = 0xFF;
|
||||
TRISF = 0xFE;
|
||||
TRISA = 0xFF;
|
||||
TRISG = 0x07;
|
||||
TRISB = 0xFF;
|
||||
TRISH = 0x00;
|
||||
TRISC = 0xFF;
|
||||
TRISD = 0xFF;
|
||||
|
||||
/**
|
||||
ANSELx registers
|
||||
*/
|
||||
ANCON0 = 0xFF;
|
||||
ANCON1 = 0x0F;
|
||||
ANCON2 = 0x0C;
|
||||
|
||||
/**
|
||||
WPUx registers
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
void PIN_MANAGER_IOC(void)
|
||||
{
|
||||
// Clear global Interrupt-On-Change flag
|
||||
INTCONbits.RBIF = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
End of File
|
||||
*/
|
@ -0,0 +1,270 @@
|
||||
/**
|
||||
@Generated Pin Manager Header File
|
||||
|
||||
@Company:
|
||||
Microchip Technology Inc.
|
||||
|
||||
@File Name:
|
||||
pin_manager.h
|
||||
|
||||
@Summary:
|
||||
This is the Pin Manager file generated using PIC10 / PIC12 / PIC16 / PIC18 MCUs
|
||||
|
||||
@Description
|
||||
This header file provides APIs for driver for .
|
||||
Generation Information :
|
||||
Product Revision : PIC10 / PIC12 / PIC16 / PIC18 MCUs - 1.81.8
|
||||
Device : PIC18F86K22
|
||||
Driver Version : 2.11
|
||||
The generated drivers are tested against the following:
|
||||
Compiler : XC8 2.36 and above
|
||||
MPLAB : MPLAB X 6.00
|
||||
*/
|
||||
|
||||
/*
|
||||
(c) 2018 Microchip Technology Inc. and its subsidiaries.
|
||||
|
||||
Subject to your compliance with these terms, you may use Microchip software and any
|
||||
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
|
||||
license terms applicable to your use of third party software (including open source software) that
|
||||
may accompany Microchip software.
|
||||
|
||||
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
|
||||
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
|
||||
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE.
|
||||
|
||||
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
|
||||
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
|
||||
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
|
||||
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
|
||||
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
|
||||
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
|
||||
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef PIN_MANAGER_H
|
||||
#define PIN_MANAGER_H
|
||||
|
||||
/**
|
||||
Section: Included Files
|
||||
*/
|
||||
|
||||
#include <xc.h>
|
||||
|
||||
#define INPUT 1
|
||||
#define OUTPUT 0
|
||||
|
||||
#define HIGH 1
|
||||
#define LOW 0
|
||||
|
||||
#define ANALOG 1
|
||||
#define DIGITAL 0
|
||||
|
||||
#define PULL_UP_ENABLED 1
|
||||
#define PULL_UP_DISABLED 0
|
||||
|
||||
// get/set INPUT1 aliases
|
||||
#define INPUT1_TRIS TRISBbits.TRISB0
|
||||
#define INPUT1_LAT LATBbits.LATB0
|
||||
#define INPUT1_PORT PORTBbits.RB0
|
||||
#define INPUT1_SetHigh() do { LATBbits.LATB0 = 1; } while(0)
|
||||
#define INPUT1_SetLow() do { LATBbits.LATB0 = 0; } while(0)
|
||||
#define INPUT1_Toggle() do { LATBbits.LATB0 = ~LATBbits.LATB0; } while(0)
|
||||
#define INPUT1_GetValue() PORTBbits.RB0
|
||||
#define INPUT1_SetDigitalInput() do { TRISBbits.TRISB0 = 1; } while(0)
|
||||
#define INPUT1_SetDigitalOutput() do { TRISBbits.TRISB0 = 0; } while(0)
|
||||
|
||||
// get/set INPUT2 aliases
|
||||
#define INPUT2_TRIS TRISBbits.TRISB1
|
||||
#define INPUT2_LAT LATBbits.LATB1
|
||||
#define INPUT2_PORT PORTBbits.RB1
|
||||
#define INPUT2_SetHigh() do { LATBbits.LATB1 = 1; } while(0)
|
||||
#define INPUT2_SetLow() do { LATBbits.LATB1 = 0; } while(0)
|
||||
#define INPUT2_Toggle() do { LATBbits.LATB1 = ~LATBbits.LATB1; } while(0)
|
||||
#define INPUT2_GetValue() PORTBbits.RB1
|
||||
#define INPUT2_SetDigitalInput() do { TRISBbits.TRISB1 = 1; } while(0)
|
||||
#define INPUT2_SetDigitalOutput() do { TRISBbits.TRISB1 = 0; } while(0)
|
||||
|
||||
// get/set INPUT3 aliases
|
||||
#define INPUT3_TRIS TRISBbits.TRISB4
|
||||
#define INPUT3_LAT LATBbits.LATB4
|
||||
#define INPUT3_PORT PORTBbits.RB4
|
||||
#define INPUT3_SetHigh() do { LATBbits.LATB4 = 1; } while(0)
|
||||
#define INPUT3_SetLow() do { LATBbits.LATB4 = 0; } while(0)
|
||||
#define INPUT3_Toggle() do { LATBbits.LATB4 = ~LATBbits.LATB4; } while(0)
|
||||
#define INPUT3_GetValue() PORTBbits.RB4
|
||||
#define INPUT3_SetDigitalInput() do { TRISBbits.TRISB4 = 1; } while(0)
|
||||
#define INPUT3_SetDigitalOutput() do { TRISBbits.TRISB4 = 0; } while(0)
|
||||
|
||||
// get/set OUTPUT9 aliases
|
||||
#define OUTPUT9_TRIS TRISGbits.TRISG3
|
||||
#define OUTPUT9_LAT LATGbits.LATG3
|
||||
#define OUTPUT9_PORT PORTGbits.RG3
|
||||
#define OUTPUT9_ANS ANCON2bits.ANSEL17
|
||||
#define OUTPUT9_SetHigh() do { LATGbits.LATG3 = 1; } while(0)
|
||||
#define OUTPUT9_SetLow() do { LATGbits.LATG3 = 0; } while(0)
|
||||
#define OUTPUT9_Toggle() do { LATGbits.LATG3 = ~LATGbits.LATG3; } while(0)
|
||||
#define OUTPUT9_GetValue() PORTGbits.RG3
|
||||
#define OUTPUT9_SetDigitalInput() do { TRISGbits.TRISG3 = 1; } while(0)
|
||||
#define OUTPUT9_SetDigitalOutput() do { TRISGbits.TRISG3 = 0; } while(0)
|
||||
#define OUTPUT9_SetAnalogMode() do { ANCON2bits.ANSEL17 = 1; } while(0)
|
||||
#define OUTPUT9_SetDigitalMode() do { ANCON2bits.ANSEL17 = 0; } while(0)
|
||||
|
||||
// get/set OUTPUT10 aliases
|
||||
#define OUTPUT10_TRIS TRISGbits.TRISG4
|
||||
#define OUTPUT10_LAT LATGbits.LATG4
|
||||
#define OUTPUT10_PORT PORTGbits.RG4
|
||||
#define OUTPUT10_ANS ANCON2bits.ANSEL16
|
||||
#define OUTPUT10_SetHigh() do { LATGbits.LATG4 = 1; } while(0)
|
||||
#define OUTPUT10_SetLow() do { LATGbits.LATG4 = 0; } while(0)
|
||||
#define OUTPUT10_Toggle() do { LATGbits.LATG4 = ~LATGbits.LATG4; } while(0)
|
||||
#define OUTPUT10_GetValue() PORTGbits.RG4
|
||||
#define OUTPUT10_SetDigitalInput() do { TRISGbits.TRISG4 = 1; } while(0)
|
||||
#define OUTPUT10_SetDigitalOutput() do { TRISGbits.TRISG4 = 0; } while(0)
|
||||
#define OUTPUT10_SetAnalogMode() do { ANCON2bits.ANSEL16 = 1; } while(0)
|
||||
#define OUTPUT10_SetDigitalMode() do { ANCON2bits.ANSEL16 = 0; } while(0)
|
||||
|
||||
// get/set OUTPUT1 aliases
|
||||
#define OUTPUT1_TRIS TRISHbits.TRISH0
|
||||
#define OUTPUT1_LAT LATHbits.LATH0
|
||||
#define OUTPUT1_PORT PORTHbits.RH0
|
||||
#define OUTPUT1_ANS ANCON2bits.ANSEL23
|
||||
#define OUTPUT1_SetHigh() do { LATHbits.LATH0 = 1; } while(0)
|
||||
#define OUTPUT1_SetLow() do { LATHbits.LATH0 = 0; } while(0)
|
||||
#define OUTPUT1_Toggle() do { LATHbits.LATH0 = ~LATHbits.LATH0; } while(0)
|
||||
#define OUTPUT1_GetValue() PORTHbits.RH0
|
||||
#define OUTPUT1_SetDigitalInput() do { TRISHbits.TRISH0 = 1; } while(0)
|
||||
#define OUTPUT1_SetDigitalOutput() do { TRISHbits.TRISH0 = 0; } while(0)
|
||||
#define OUTPUT1_SetAnalogMode() do { ANCON2bits.ANSEL23 = 1; } while(0)
|
||||
#define OUTPUT1_SetDigitalMode() do { ANCON2bits.ANSEL23 = 0; } while(0)
|
||||
|
||||
// get/set OUTPUT2 aliases
|
||||
#define OUTPUT2_TRIS TRISHbits.TRISH1
|
||||
#define OUTPUT2_LAT LATHbits.LATH1
|
||||
#define OUTPUT2_PORT PORTHbits.RH1
|
||||
#define OUTPUT2_ANS ANCON2bits.ANSEL22
|
||||
#define OUTPUT2_SetHigh() do { LATHbits.LATH1 = 1; } while(0)
|
||||
#define OUTPUT2_SetLow() do { LATHbits.LATH1 = 0; } while(0)
|
||||
#define OUTPUT2_Toggle() do { LATHbits.LATH1 = ~LATHbits.LATH1; } while(0)
|
||||
#define OUTPUT2_GetValue() PORTHbits.RH1
|
||||
#define OUTPUT2_SetDigitalInput() do { TRISHbits.TRISH1 = 1; } while(0)
|
||||
#define OUTPUT2_SetDigitalOutput() do { TRISHbits.TRISH1 = 0; } while(0)
|
||||
#define OUTPUT2_SetAnalogMode() do { ANCON2bits.ANSEL22 = 1; } while(0)
|
||||
#define OUTPUT2_SetDigitalMode() do { ANCON2bits.ANSEL22 = 0; } while(0)
|
||||
|
||||
// get/set OUTPUT3 aliases
|
||||
#define OUTPUT3_TRIS TRISHbits.TRISH2
|
||||
#define OUTPUT3_LAT LATHbits.LATH2
|
||||
#define OUTPUT3_PORT PORTHbits.RH2
|
||||
#define OUTPUT3_ANS ANCON2bits.ANSEL21
|
||||
#define OUTPUT3_SetHigh() do { LATHbits.LATH2 = 1; } while(0)
|
||||
#define OUTPUT3_SetLow() do { LATHbits.LATH2 = 0; } while(0)
|
||||
#define OUTPUT3_Toggle() do { LATHbits.LATH2 = ~LATHbits.LATH2; } while(0)
|
||||
#define OUTPUT3_GetValue() PORTHbits.RH2
|
||||
#define OUTPUT3_SetDigitalInput() do { TRISHbits.TRISH2 = 1; } while(0)
|
||||
#define OUTPUT3_SetDigitalOutput() do { TRISHbits.TRISH2 = 0; } while(0)
|
||||
#define OUTPUT3_SetAnalogMode() do { ANCON2bits.ANSEL21 = 1; } while(0)
|
||||
#define OUTPUT3_SetDigitalMode() do { ANCON2bits.ANSEL21 = 0; } while(0)
|
||||
|
||||
// get/set OUTPUT4 aliases
|
||||
#define OUTPUT4_TRIS TRISHbits.TRISH3
|
||||
#define OUTPUT4_LAT LATHbits.LATH3
|
||||
#define OUTPUT4_PORT PORTHbits.RH3
|
||||
#define OUTPUT4_ANS ANCON2bits.ANSEL20
|
||||
#define OUTPUT4_SetHigh() do { LATHbits.LATH3 = 1; } while(0)
|
||||
#define OUTPUT4_SetLow() do { LATHbits.LATH3 = 0; } while(0)
|
||||
#define OUTPUT4_Toggle() do { LATHbits.LATH3 = ~LATHbits.LATH3; } while(0)
|
||||
#define OUTPUT4_GetValue() PORTHbits.RH3
|
||||
#define OUTPUT4_SetDigitalInput() do { TRISHbits.TRISH3 = 1; } while(0)
|
||||
#define OUTPUT4_SetDigitalOutput() do { TRISHbits.TRISH3 = 0; } while(0)
|
||||
#define OUTPUT4_SetAnalogMode() do { ANCON2bits.ANSEL20 = 1; } while(0)
|
||||
#define OUTPUT4_SetDigitalMode() do { ANCON2bits.ANSEL20 = 0; } while(0)
|
||||
|
||||
// get/set OUTPUT5 aliases
|
||||
#define OUTPUT5_TRIS TRISHbits.TRISH4
|
||||
#define OUTPUT5_LAT LATHbits.LATH4
|
||||
#define OUTPUT5_PORT PORTHbits.RH4
|
||||
#define OUTPUT5_ANS ANCON1bits.ANSEL12
|
||||
#define OUTPUT5_SetHigh() do { LATHbits.LATH4 = 1; } while(0)
|
||||
#define OUTPUT5_SetLow() do { LATHbits.LATH4 = 0; } while(0)
|
||||
#define OUTPUT5_Toggle() do { LATHbits.LATH4 = ~LATHbits.LATH4; } while(0)
|
||||
#define OUTPUT5_GetValue() PORTHbits.RH4
|
||||
#define OUTPUT5_SetDigitalInput() do { TRISHbits.TRISH4 = 1; } while(0)
|
||||
#define OUTPUT5_SetDigitalOutput() do { TRISHbits.TRISH4 = 0; } while(0)
|
||||
#define OUTPUT5_SetAnalogMode() do { ANCON1bits.ANSEL12 = 1; } while(0)
|
||||
#define OUTPUT5_SetDigitalMode() do { ANCON1bits.ANSEL12 = 0; } while(0)
|
||||
|
||||
// get/set OUTPUT6 aliases
|
||||
#define OUTPUT6_TRIS TRISHbits.TRISH5
|
||||
#define OUTPUT6_LAT LATHbits.LATH5
|
||||
#define OUTPUT6_PORT PORTHbits.RH5
|
||||
#define OUTPUT6_ANS ANCON1bits.ANSEL13
|
||||
#define OUTPUT6_SetHigh() do { LATHbits.LATH5 = 1; } while(0)
|
||||
#define OUTPUT6_SetLow() do { LATHbits.LATH5 = 0; } while(0)
|
||||
#define OUTPUT6_Toggle() do { LATHbits.LATH5 = ~LATHbits.LATH5; } while(0)
|
||||
#define OUTPUT6_GetValue() PORTHbits.RH5
|
||||
#define OUTPUT6_SetDigitalInput() do { TRISHbits.TRISH5 = 1; } while(0)
|
||||
#define OUTPUT6_SetDigitalOutput() do { TRISHbits.TRISH5 = 0; } while(0)
|
||||
#define OUTPUT6_SetAnalogMode() do { ANCON1bits.ANSEL13 = 1; } while(0)
|
||||
#define OUTPUT6_SetDigitalMode() do { ANCON1bits.ANSEL13 = 0; } while(0)
|
||||
|
||||
// get/set OUTPUT7 aliases
|
||||
#define OUTPUT7_TRIS TRISHbits.TRISH6
|
||||
#define OUTPUT7_LAT LATHbits.LATH6
|
||||
#define OUTPUT7_PORT PORTHbits.RH6
|
||||
#define OUTPUT7_ANS ANCON1bits.ANSEL14
|
||||
#define OUTPUT7_SetHigh() do { LATHbits.LATH6 = 1; } while(0)
|
||||
#define OUTPUT7_SetLow() do { LATHbits.LATH6 = 0; } while(0)
|
||||
#define OUTPUT7_Toggle() do { LATHbits.LATH6 = ~LATHbits.LATH6; } while(0)
|
||||
#define OUTPUT7_GetValue() PORTHbits.RH6
|
||||
#define OUTPUT7_SetDigitalInput() do { TRISHbits.TRISH6 = 1; } while(0)
|
||||
#define OUTPUT7_SetDigitalOutput() do { TRISHbits.TRISH6 = 0; } while(0)
|
||||
#define OUTPUT7_SetAnalogMode() do { ANCON1bits.ANSEL14 = 1; } while(0)
|
||||
#define OUTPUT7_SetDigitalMode() do { ANCON1bits.ANSEL14 = 0; } while(0)
|
||||
|
||||
// get/set OUTPUT8 aliases
|
||||
#define OUTPUT8_TRIS TRISHbits.TRISH7
|
||||
#define OUTPUT8_LAT LATHbits.LATH7
|
||||
#define OUTPUT8_PORT PORTHbits.RH7
|
||||
#define OUTPUT8_ANS ANCON1bits.ANSEL15
|
||||
#define OUTPUT8_SetHigh() do { LATHbits.LATH7 = 1; } while(0)
|
||||
#define OUTPUT8_SetLow() do { LATHbits.LATH7 = 0; } while(0)
|
||||
#define OUTPUT8_Toggle() do { LATHbits.LATH7 = ~LATHbits.LATH7; } while(0)
|
||||
#define OUTPUT8_GetValue() PORTHbits.RH7
|
||||
#define OUTPUT8_SetDigitalInput() do { TRISHbits.TRISH7 = 1; } while(0)
|
||||
#define OUTPUT8_SetDigitalOutput() do { TRISHbits.TRISH7 = 0; } while(0)
|
||||
#define OUTPUT8_SetAnalogMode() do { ANCON1bits.ANSEL15 = 1; } while(0)
|
||||
#define OUTPUT8_SetDigitalMode() do { ANCON1bits.ANSEL15 = 0; } while(0)
|
||||
|
||||
/**
|
||||
@Param
|
||||
none
|
||||
@Returns
|
||||
none
|
||||
@Description
|
||||
GPIO and peripheral I/O initialization
|
||||
@Example
|
||||
PIN_MANAGER_Initialize();
|
||||
*/
|
||||
void PIN_MANAGER_Initialize (void);
|
||||
|
||||
/**
|
||||
* @Param
|
||||
none
|
||||
* @Returns
|
||||
none
|
||||
* @Description
|
||||
Interrupt on Change Handling routine
|
||||
* @Example
|
||||
PIN_MANAGER_IOC();
|
||||
*/
|
||||
void PIN_MANAGER_IOC(void);
|
||||
|
||||
|
||||
|
||||
#endif // PIN_MANAGER_H
|
||||
/**
|
||||
End of File
|
||||
*/
|
167
03-software/ch/kb28/blinkerProject/mcc_generated_files/tmr0.c
Normal file
167
03-software/ch/kb28/blinkerProject/mcc_generated_files/tmr0.c
Normal file
@ -0,0 +1,167 @@
|
||||
/**
|
||||
TMR0 Generated Driver File
|
||||
|
||||
@Company
|
||||
Microchip Technology Inc.
|
||||
|
||||
@File Name
|
||||
tmr0.c
|
||||
|
||||
@Summary
|
||||
This is the generated driver implementation file for the TMR0 driver using PIC10 / PIC12 / PIC16 / PIC18 MCUs
|
||||
|
||||
@Description
|
||||
This source file provides APIs for TMR0.
|
||||
Generation Information :
|
||||
Product Revision : PIC10 / PIC12 / PIC16 / PIC18 MCUs - 1.81.8
|
||||
Device : PIC18F86K22
|
||||
Driver Version : 2.01
|
||||
The generated drivers are tested against the following:
|
||||
Compiler : XC8 2.36 and above
|
||||
MPLAB : MPLAB X 6.00
|
||||
*/
|
||||
|
||||
/*
|
||||
(c) 2018 Microchip Technology Inc. and its subsidiaries.
|
||||
|
||||
Subject to your compliance with these terms, you may use Microchip software and any
|
||||
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
|
||||
license terms applicable to your use of third party software (including open source software) that
|
||||
may accompany Microchip software.
|
||||
|
||||
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
|
||||
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
|
||||
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE.
|
||||
|
||||
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
|
||||
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
|
||||
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
|
||||
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
|
||||
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
|
||||
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
|
||||
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
Section: Included Files
|
||||
*/
|
||||
|
||||
#include <xc.h>
|
||||
#include "tmr0.h"
|
||||
|
||||
/**
|
||||
Section: Global Variables Definitions
|
||||
*/
|
||||
|
||||
void (*TMR0_InterruptHandler)(void);
|
||||
|
||||
volatile uint16_t timer0ReloadVal;
|
||||
|
||||
/**
|
||||
Section: TMR0 APIs
|
||||
*/
|
||||
|
||||
|
||||
void TMR0_Initialize(void)
|
||||
{
|
||||
// Set TMR0 to the options selected in the User Interface
|
||||
|
||||
//Enable 16bit timer mode before assigning value to TMR0H
|
||||
T0CONbits.T08BIT = 0;
|
||||
|
||||
// TMR0H 99;
|
||||
TMR0H = 0x63;
|
||||
|
||||
// TMR0L 191;
|
||||
TMR0L = 0xBF;
|
||||
|
||||
|
||||
// Load TMR0 value to the 16-bit reload variable
|
||||
timer0ReloadVal = (uint16_t)((TMR0H << 8) | TMR0L);
|
||||
|
||||
// Clear Interrupt flag before enabling the interrupt
|
||||
INTCONbits.TMR0IF = 0;
|
||||
|
||||
// Enabling TMR0 interrupt.
|
||||
INTCONbits.TMR0IE = 1;
|
||||
|
||||
// Set Default Interrupt Handler
|
||||
TMR0_SetInterruptHandler(TMR0_DefaultInterruptHandler);
|
||||
|
||||
// T0PS 1:4; T08BIT 16-bit; T0SE Increment_hi_lo; T0CS FOSC/4; TMR0ON enabled; PSA assigned;
|
||||
T0CON = 0x91;
|
||||
}
|
||||
|
||||
void TMR0_StartTimer(void)
|
||||
{
|
||||
// Start the Timer by writing to TMR0ON bit
|
||||
T0CONbits.TMR0ON = 1;
|
||||
}
|
||||
|
||||
void TMR0_StopTimer(void)
|
||||
{
|
||||
// Stop the Timer by writing to TMR0ON bit
|
||||
T0CONbits.TMR0ON = 0;
|
||||
}
|
||||
|
||||
uint16_t TMR0_ReadTimer(void)
|
||||
{
|
||||
uint16_t readVal;
|
||||
uint8_t readValLow;
|
||||
uint8_t readValHigh;
|
||||
|
||||
readValLow = TMR0L;
|
||||
readValHigh = TMR0H;
|
||||
readVal = ((uint16_t)readValHigh << 8) + readValLow;
|
||||
|
||||
return readVal;
|
||||
}
|
||||
|
||||
void TMR0_WriteTimer(uint16_t timerVal)
|
||||
{
|
||||
// Write to the Timer0 register
|
||||
TMR0H = timerVal >> 8;
|
||||
TMR0L = (uint8_t) timerVal;
|
||||
}
|
||||
|
||||
void TMR0_Reload(void)
|
||||
{
|
||||
// Write to the Timer0 register
|
||||
TMR0H = timer0ReloadVal >> 8;
|
||||
TMR0L = (uint8_t) timer0ReloadVal;
|
||||
}
|
||||
|
||||
void TMR0_ISR(void)
|
||||
{
|
||||
|
||||
// clear the TMR0 interrupt flag
|
||||
INTCONbits.TMR0IF = 0;
|
||||
|
||||
// reload TMR0
|
||||
// Write to the Timer0 register
|
||||
TMR0H = timer0ReloadVal >> 8;
|
||||
TMR0L = (uint8_t) timer0ReloadVal;
|
||||
|
||||
if(TMR0_InterruptHandler)
|
||||
{
|
||||
TMR0_InterruptHandler();
|
||||
}
|
||||
|
||||
// add your TMR0 interrupt custom code
|
||||
}
|
||||
|
||||
|
||||
void TMR0_SetInterruptHandler(void (* InterruptHandler)(void)){
|
||||
TMR0_InterruptHandler = InterruptHandler;
|
||||
}
|
||||
|
||||
void TMR0_DefaultInterruptHandler(void){
|
||||
// add your TMR0 interrupt custom code
|
||||
// or set custom function using TMR0_SetInterruptHandler()
|
||||
}
|
||||
|
||||
/**
|
||||
End of File
|
||||
*/
|
356
03-software/ch/kb28/blinkerProject/mcc_generated_files/tmr0.h
Normal file
356
03-software/ch/kb28/blinkerProject/mcc_generated_files/tmr0.h
Normal file
@ -0,0 +1,356 @@
|
||||
/**
|
||||
TMR0 Generated Driver API Header File
|
||||
|
||||
@Company
|
||||
Microchip Technology Inc.
|
||||
|
||||
@File Name
|
||||
tmr0.h
|
||||
|
||||
@Summary
|
||||
This is the generated header file for the TMR0 driver using PIC10 / PIC12 / PIC16 / PIC18 MCUs
|
||||
|
||||
@Description
|
||||
This header file provides APIs for TMR0.
|
||||
Generation Information :
|
||||
Product Revision : PIC10 / PIC12 / PIC16 / PIC18 MCUs - 1.81.8
|
||||
Device : PIC18F86K22
|
||||
Driver Version : 2.01
|
||||
The generated drivers are tested against the following:
|
||||
Compiler : XC8 2.36 and above
|
||||
MPLAB : MPLAB X 6.00
|
||||
*/
|
||||
|
||||
/*
|
||||
(c) 2018 Microchip Technology Inc. and its subsidiaries.
|
||||
|
||||
Subject to your compliance with these terms, you may use Microchip software and any
|
||||
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
|
||||
license terms applicable to your use of third party software (including open source software) that
|
||||
may accompany Microchip software.
|
||||
|
||||
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
|
||||
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
|
||||
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE.
|
||||
|
||||
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
|
||||
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
|
||||
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
|
||||
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
|
||||
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
|
||||
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
|
||||
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef TMR0_H
|
||||
#define TMR0_H
|
||||
|
||||
/**
|
||||
Section: Included Files
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#ifdef __cplusplus // Provide C++ Compatibility
|
||||
|
||||
extern "C" {
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/**
|
||||
Section: TMR0 APIs
|
||||
*/
|
||||
|
||||
/**
|
||||
@Summary
|
||||
Initializes the TMR0.
|
||||
|
||||
@Description
|
||||
This function initializes the TMR0 Registers.
|
||||
This function must be called before any other TMR0 function is called.
|
||||
|
||||
@Preconditions
|
||||
None
|
||||
|
||||
@Param
|
||||
None
|
||||
|
||||
@Returns
|
||||
None
|
||||
|
||||
@Comment
|
||||
|
||||
|
||||
@Example
|
||||
<code>
|
||||
main()
|
||||
{
|
||||
// Initialize TMR0 module
|
||||
TMR0_Initialize();
|
||||
|
||||
// Do something else...
|
||||
}
|
||||
</code>
|
||||
*/
|
||||
void TMR0_Initialize(void);
|
||||
|
||||
/**
|
||||
@Summary
|
||||
This function starts the TMR0.
|
||||
|
||||
@Description
|
||||
This function starts the TMR0 operation.
|
||||
This function must be called after the initialization of TMR0.
|
||||
|
||||
@Preconditions
|
||||
Initialize the TMR0 before calling this function.
|
||||
|
||||
@Param
|
||||
None
|
||||
|
||||
@Returns
|
||||
None
|
||||
|
||||
@Example
|
||||
<code>
|
||||
// Initialize TMR0 module
|
||||
|
||||
// Start TMR0
|
||||
TMR0_StartTimer();
|
||||
|
||||
// Do something else...
|
||||
</code>
|
||||
*/
|
||||
void TMR0_StartTimer(void);
|
||||
|
||||
/**
|
||||
@Summary
|
||||
This function stops the TMR0.
|
||||
|
||||
@Description
|
||||
This function stops the TMR0 operation.
|
||||
This function must be called after the start of TMR0.
|
||||
|
||||
@Preconditions
|
||||
Initialize the TMR0 before calling this function.
|
||||
|
||||
@Param
|
||||
None
|
||||
|
||||
@Returns
|
||||
None
|
||||
|
||||
@Example
|
||||
<code>
|
||||
// Initialize TMR0 module
|
||||
|
||||
// Start TMR0
|
||||
TMR0_StartTimer();
|
||||
|
||||
// Do something else...
|
||||
|
||||
// Stop TMR0;
|
||||
TMR0_StopTimer();
|
||||
</code>
|
||||
*/
|
||||
void TMR0_StopTimer(void);
|
||||
|
||||
|
||||
/**
|
||||
@Summary
|
||||
Reads the 16 bits TMR0 register value.
|
||||
|
||||
@Description
|
||||
This function reads the 16 bits TMR0 register value and return it.
|
||||
|
||||
@Preconditions
|
||||
Initialize the TMR0 before calling this function.
|
||||
|
||||
@Param
|
||||
None
|
||||
|
||||
@Returns
|
||||
This function returns the 16 bits value of TMR0 register.
|
||||
|
||||
@Example
|
||||
<code>
|
||||
// Initialize TMR0 module
|
||||
|
||||
// Start TMR0
|
||||
TMR0_StartTimer();
|
||||
|
||||
// Read the current value of TMR0
|
||||
if(0 == TMR0_ReadTimer())
|
||||
{
|
||||
// Do something else...
|
||||
|
||||
// Reload the TMR value
|
||||
TMR0_Reload();
|
||||
}
|
||||
</code>
|
||||
*/
|
||||
uint16_t TMR0_ReadTimer(void);
|
||||
|
||||
/**
|
||||
@Summary
|
||||
Writes the 16 bits value to TMR0 register.
|
||||
|
||||
@Description
|
||||
This function writes the 16 bits value to TMR0 register.
|
||||
This function must be called after the initialization of TMR0.
|
||||
|
||||
@Preconditions
|
||||
Initialize the TMR0 before calling this function.
|
||||
|
||||
@Param
|
||||
timerVal - Value to write into TMR0 register.
|
||||
|
||||
@Returns
|
||||
None
|
||||
|
||||
@Example
|
||||
<code>
|
||||
#define PERIOD 0x8000
|
||||
#define ZERO 0x0000
|
||||
|
||||
while(1)
|
||||
{
|
||||
//Read the TMR0 register
|
||||
if(ZERO == TMR0_ReadTimer())
|
||||
{
|
||||
// Do something else...
|
||||
|
||||
// Write the TMR0 register
|
||||
TMR0_WriteTimer(PERIOD);
|
||||
}
|
||||
|
||||
// Do something else...
|
||||
}
|
||||
</code>
|
||||
*/
|
||||
void TMR0_WriteTimer(uint16_t timerVal);
|
||||
|
||||
/**
|
||||
@Summary
|
||||
Reload the 16 bits value to TMR0 register.
|
||||
|
||||
@Description
|
||||
This function reloads the 16 bit value to TMR0 register.
|
||||
This function must be called to write initial value into TMR0 register.
|
||||
|
||||
@Preconditions
|
||||
Initialize the TMR0 before calling this function.
|
||||
|
||||
@Param
|
||||
None
|
||||
|
||||
@Returns
|
||||
None
|
||||
|
||||
@Example
|
||||
<code>
|
||||
while(1)
|
||||
{
|
||||
if(TMR0IF)
|
||||
{
|
||||
// Do something else...
|
||||
|
||||
// clear the TMR0 interrupt flag
|
||||
TMR0IF = 0;
|
||||
|
||||
// Reload the initial value of TMR0
|
||||
TMR0_Reload();
|
||||
}
|
||||
}
|
||||
</code>
|
||||
*/
|
||||
void TMR0_Reload(void);
|
||||
|
||||
/**
|
||||
@Summary
|
||||
Timer Interrupt Service Routine
|
||||
|
||||
@Description
|
||||
Timer Interrupt Service Routine is called by the Interrupt Manager.
|
||||
|
||||
@Preconditions
|
||||
Initialize the TMR0 module with interrupt before calling this isr.
|
||||
|
||||
@Param
|
||||
None
|
||||
|
||||
@Returns
|
||||
None
|
||||
*/
|
||||
void TMR0_ISR(void);
|
||||
|
||||
|
||||
/**
|
||||
@Summary
|
||||
Set Timer Interrupt Handler
|
||||
|
||||
@Description
|
||||
This sets the function to be called during the ISR
|
||||
|
||||
@Preconditions
|
||||
Initialize the TMR0 module with interrupt before calling this.
|
||||
|
||||
@Param
|
||||
Address of function to be set
|
||||
|
||||
@Returns
|
||||
None
|
||||
*/
|
||||
void TMR0_SetInterruptHandler(void (* InterruptHandler)(void));
|
||||
|
||||
/**
|
||||
@Summary
|
||||
Timer Interrupt Handler
|
||||
|
||||
@Description
|
||||
This is a function pointer to the function that will be called during the ISR
|
||||
|
||||
@Preconditions
|
||||
Initialize the TMR0 module with interrupt before calling this isr.
|
||||
|
||||
@Param
|
||||
None
|
||||
|
||||
@Returns
|
||||
None
|
||||
*/
|
||||
extern void (*TMR0_InterruptHandler)(void);
|
||||
|
||||
/**
|
||||
@Summary
|
||||
Default Timer Interrupt Handler
|
||||
|
||||
@Description
|
||||
This is the default Interrupt Handler function
|
||||
|
||||
@Preconditions
|
||||
Initialize the TMR0 module with interrupt before calling this isr.
|
||||
|
||||
@Param
|
||||
None
|
||||
|
||||
@Returns
|
||||
None
|
||||
*/
|
||||
void TMR0_DefaultInterruptHandler(void);
|
||||
|
||||
#ifdef __cplusplus // Provide C++ Compatibility
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#endif // TMR0_H
|
||||
/**
|
||||
End of File
|
||||
*/
|
61
03-software/ch/kb28/blinkerProject/xf/event.c
Executable file
61
03-software/ch/kb28/blinkerProject/xf/event.c
Executable file
@ -0,0 +1,61 @@
|
||||
#include "event.h"
|
||||
#define NULL ((void*)(0))
|
||||
|
||||
void Event_init(struct Event_* me)
|
||||
{
|
||||
me->id = NULLEVENT;
|
||||
me->delay = 0;
|
||||
me->target = NULL;
|
||||
me->data = 0x0;
|
||||
me->processEvent = NULL;
|
||||
}
|
||||
|
||||
void Event_setData(Event* me, int64_t data)
|
||||
{
|
||||
me->data = data;
|
||||
}
|
||||
|
||||
int64_t Event_getData(Event* me)
|
||||
{
|
||||
return me->data;
|
||||
}
|
||||
|
||||
void Event_setPE(Event* me, processEventT processEvent)
|
||||
{
|
||||
me->processEvent = processEvent;
|
||||
}
|
||||
|
||||
void Event_setTarget(Event* me, void* target)
|
||||
{
|
||||
me->target = target;
|
||||
}
|
||||
|
||||
processEventT Event_getPE(Event* me)
|
||||
{
|
||||
return me->processEvent;
|
||||
}
|
||||
|
||||
void* Event_getTarget(Event* me)
|
||||
{
|
||||
return me->target;
|
||||
}
|
||||
|
||||
void Event_setId(Event* me, evIDT eventID)
|
||||
{
|
||||
me->id = eventID;
|
||||
}
|
||||
|
||||
evIDT Event_getId(Event* me)
|
||||
{
|
||||
return me->id;
|
||||
}
|
||||
|
||||
void Event_setDelay(Event* me, uint16_t delay)
|
||||
{
|
||||
me->delay = delay;
|
||||
}
|
||||
|
||||
uint16_t Event_getDelay(Event* me)
|
||||
{
|
||||
return me->delay;
|
||||
}
|
35
03-software/ch/kb28/blinkerProject/xf/event.h
Executable file
35
03-software/ch/kb28/blinkerProject/xf/event.h
Executable file
@ -0,0 +1,35 @@
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include "ireactive.h"
|
||||
|
||||
#ifndef EVENT_ONCE
|
||||
#define EVENT_ONCE
|
||||
|
||||
typedef uint8_t evIDT;
|
||||
#define NULLEVENT 0 // no event
|
||||
|
||||
struct Event_
|
||||
{
|
||||
evIDT id;
|
||||
processEventT processEvent;
|
||||
void* target;
|
||||
uint16_t delay;
|
||||
int64_t data;
|
||||
};
|
||||
|
||||
typedef struct Event_ Event;
|
||||
|
||||
//public methods
|
||||
void Event_init(Event* me);
|
||||
void Event_setTarget(Event* me, void* target);
|
||||
void Event_setPE(Event* me, processEventT processEvent);
|
||||
void* Event_getTarget(Event* me);
|
||||
processEventT Event_getPE(Event* me);
|
||||
void Event_setId(Event* me, evIDT eventID);
|
||||
evIDT Event_getId(Event* me);
|
||||
void Event_setDelay(Event* me, uint16_t delay);
|
||||
uint16_t Event_getDelay(Event* me);
|
||||
void Event_setData(Event* me, int64_t data);
|
||||
int64_t Event_getData(Event* me);
|
||||
|
||||
#endif
|
8
03-software/ch/kb28/blinkerProject/xf/ireactive.h
Executable file
8
03-software/ch/kb28/blinkerProject/xf/ireactive.h
Executable file
@ -0,0 +1,8 @@
|
||||
#ifndef IREACTIVE_ONCE
|
||||
#define IREACTIVE_ONCE
|
||||
|
||||
struct Event_;
|
||||
|
||||
typedef bool (*processEventT)(struct Event_* ev);
|
||||
|
||||
#endif
|
292
03-software/ch/kb28/blinkerProject/xf/xf.c
Executable file
292
03-software/ch/kb28/blinkerProject/xf/xf.c
Executable file
@ -0,0 +1,292 @@
|
||||
/******************************************************************************/
|
||||
/* FILENAME : xf.h */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* GOAL : Offers the femto XF functions (for PIC CPU) */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* AUTHOR : Medard Rieder / Pascal Sartoretti */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* DATE: : original (Medard Rieder 08.2011) */
|
||||
/* corrections & simplified (Pascal Sartoretti 06.2016) */
|
||||
/******************************************************************************/
|
||||
|
||||
#include "xf.h"
|
||||
#include "../mcc_generated_files/mcc.h"
|
||||
|
||||
/*
|
||||
* private methods of the XF
|
||||
*/
|
||||
|
||||
/******************************************************************************/
|
||||
/* FUNCTION : Push an event on the events queue */
|
||||
/* INPUT : ev - the event number (not 0) */
|
||||
/* inISR - (true if called in an ISR, else false) */
|
||||
/* OUTPUT : return false if the queue was full, else true */
|
||||
/* COMMENTS : - */
|
||||
/******************************************************************************/
|
||||
bool XF_pushEvent(Event ev, bool inISR, TimerID* tmid);
|
||||
/******************************************************************************/
|
||||
/* FUNCTION : Pop an event on the events queue */
|
||||
/* INPUT : inISR - (true if called in an ISR, else false) */
|
||||
/* OUTPUT : return the next waiting event if any, else 0 */
|
||||
/* COMMENTS : - */
|
||||
/******************************************************************************/
|
||||
Event XF_popEvent(bool inISR);
|
||||
/******************************************************************************/
|
||||
/* FUNCTION : Post a timer in timers queue */
|
||||
/* INPUT : tm - time before event arrives */
|
||||
/* ev - event to post */
|
||||
/* inISR - (true if called in an ISR, else false) */
|
||||
/* OUTPUT : return the timer Id used */
|
||||
/* COMMENTS : - */
|
||||
/******************************************************************************/
|
||||
TimerID XF_scheduleTimer(Time tm, Event ev, bool inISR);
|
||||
|
||||
/******************************************************************************/
|
||||
/* FUNCTION : Switch of the interrupts */
|
||||
/* INPUT : inISR - (true if called in an ISR, else f */
|
||||
/* OUTPUT : none */
|
||||
/* COMMENTS : - */
|
||||
/******************************************************************************/
|
||||
static void ENTERCRITICAL(bool inISR);
|
||||
/******************************************************************************/
|
||||
/* FUNCTION : Switch on the interrupts */
|
||||
/* INPUT : inISR - (true if called in an ISR, else f */
|
||||
/* OUTPUT : none */
|
||||
/* COMMENTS : - */
|
||||
/******************************************************************************/
|
||||
static void LEAVECRITICAL(bool inISR);
|
||||
|
||||
|
||||
/*
|
||||
* the XF instance
|
||||
*/
|
||||
XF theXF; // really the XF
|
||||
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* FUNCTION : Init the XF structure */
|
||||
/* INPUT : - */
|
||||
/* OUTPUT : - */
|
||||
/* COMMENTS : Have to be called once */
|
||||
/******************************************************************************/
|
||||
void XF_init()
|
||||
{
|
||||
int i;
|
||||
for (i=0; i<MAXEVENT; i++)
|
||||
{
|
||||
Event_init(&(theXF.eventQueue[i]));
|
||||
}
|
||||
|
||||
for (i=0; i<MAXTIMER; i++)
|
||||
{
|
||||
theXF.timerList[i].tm = NULLTIMER;
|
||||
Event_init(&(theXF.timerList[i].ev));
|
||||
}
|
||||
theXF.in = 0;
|
||||
theXF.out = 0;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/* FUNCTION : Push an event on the events queue */
|
||||
/* INPUT : ev - the event number (not 0) */
|
||||
/* inISR - (true if called in an ISR, else false) */
|
||||
/* OUTPUT : return false if the queue was full, else true */
|
||||
/* COMMENTS : - */
|
||||
/******************************************************************************/
|
||||
bool XF_pushEvent(Event ev, bool inISR, TimerID* tmid)
|
||||
{
|
||||
uint8_t temp;
|
||||
Time tm;
|
||||
tm = Event_getDelay(&ev);
|
||||
if ( tm > 0)
|
||||
{
|
||||
Event_setDelay(&ev,0);
|
||||
*tmid = XF_scheduleTimer(tm, ev, inISR);
|
||||
}
|
||||
else
|
||||
{
|
||||
ENTERCRITICAL(inISR);
|
||||
|
||||
temp = (theXF.in+1) % (uint8_t)(sizeof(theXF.eventQueue) / sizeof(Event));
|
||||
if(temp == theXF.out)
|
||||
{
|
||||
LEAVECRITICAL(inISR);
|
||||
return false;
|
||||
}
|
||||
theXF.eventQueue[theXF.in] = ev;
|
||||
theXF.in = temp;
|
||||
LEAVECRITICAL(inISR);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/* FUNCTION : Pop an event on the events queue */
|
||||
/* INPUT : inISR - (true if called in an ISR, else false) */
|
||||
/* OUTPUT : return the next waiting event if any, else 0 */
|
||||
/* COMMENTS : - */
|
||||
/******************************************************************************/
|
||||
Event XF_popEvent(bool inISR)
|
||||
{
|
||||
Event ev;
|
||||
ev.id = NULLEVENT;
|
||||
ev.target = NULL;
|
||||
ev.processEvent = NULL;
|
||||
|
||||
ENTERCRITICAL(inISR);
|
||||
if(theXF.in == theXF.out)
|
||||
{
|
||||
LEAVECRITICAL(inISR);
|
||||
return ev;
|
||||
}
|
||||
ev = theXF.eventQueue[theXF.out];
|
||||
theXF.out = (theXF.out + 1)%(uint8_t)(sizeof(theXF.eventQueue) / sizeof(Event));
|
||||
LEAVECRITICAL(inISR);
|
||||
return ev;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/* FUNCTION : Post a timer in timers queue */
|
||||
/* INPUT : tm - time before event arrives */
|
||||
/* ev - event to post */
|
||||
/* inISR - (true if called in an ISR, else false) */
|
||||
/* OUTPUT : return the timer Id used */
|
||||
/* COMMENTS : - */
|
||||
/******************************************************************************/
|
||||
TimerID XF_scheduleTimer(Time tm, Event ev, bool inISR)
|
||||
{
|
||||
uint8_t i;
|
||||
|
||||
ENTERCRITICAL(inISR);
|
||||
for (i=0; i<MAXTIMER; i++)
|
||||
{
|
||||
if (theXF.timerList[i].ev.id == NULLEVENT)
|
||||
{
|
||||
theXF.timerList[i].tm = tm;
|
||||
theXF.timerList[i].ev = ev;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//here you could react
|
||||
//if timerlist is full
|
||||
|
||||
LEAVECRITICAL(inISR);
|
||||
return i;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/* FUNCTION : Remove a timer in timers queue */
|
||||
/* INPUT : id - the timer id to remove */
|
||||
/* inISR - (true if called in an ISR, else false) */
|
||||
/* OUTPUT : - */
|
||||
/* COMMENTS : - */
|
||||
/******************************************************************************/
|
||||
void XF_unscheduleTimer(TimerID id, bool inISR)
|
||||
{
|
||||
ENTERCRITICAL(inISR);
|
||||
theXF.timerList[id].tm = NULLTIMER;
|
||||
Event_init(&(theXF.timerList[id].ev));
|
||||
LEAVECRITICAL(inISR);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/* FUNCTION : Decrement timers to post events if time elapsed */
|
||||
/* INPUT : - */
|
||||
/* OUTPUT : - */
|
||||
/* COMMENTS : This function has to be called from the timer ISR */
|
||||
/******************************************************************************/
|
||||
void XF_decrementAndQueueTimers()
|
||||
{
|
||||
uint8_t i;
|
||||
for (i=0; i<MAXTIMER; i++)
|
||||
{
|
||||
if (theXF.timerList[i].ev.id != NULLEVENT)
|
||||
{
|
||||
theXF.timerList[i].tm-=TICKINTERVAL;
|
||||
if (theXF.timerList[i].tm ==0)
|
||||
{
|
||||
TimerID dummy;
|
||||
if (XF_pushEvent(theXF.timerList[i].ev, true, &dummy) == true)
|
||||
{
|
||||
XF_unscheduleTimer(i, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
theXF.timerList[i].tm=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//here you could use done to react
|
||||
//if timerID was not found (done == 0)
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/* FUNCTION : Lock interrupts if not in ISR */
|
||||
/* INPUT : - */
|
||||
/* OUTPUT : - */
|
||||
/* COMMENTS : - */
|
||||
/******************************************************************************/
|
||||
static void ENTERCRITICAL(bool inISR)
|
||||
{
|
||||
if (inISR == false)
|
||||
{
|
||||
//GIE = 0;
|
||||
INTERRUPT_GlobalInterruptDisable();
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/* FUNCTION : Unlock interrupts if not in ISR */
|
||||
/* INPUT : - */
|
||||
/* OUTPUT : - */
|
||||
/* COMMENTS : - */
|
||||
/******************************************************************************/
|
||||
static void LEAVECRITICAL(bool inISR)
|
||||
{
|
||||
if (inISR == false)
|
||||
{
|
||||
//GIE = 1;
|
||||
INTERRUPT_GlobalInterruptEnable();
|
||||
}
|
||||
}
|
||||
|
||||
TimerID POST(void* target, processEventT processEvent, uint8_t id, Time delay , int64_t data)
|
||||
{
|
||||
TimerID tmid = MAXTIMER; //this is to say that no timer has been scheduled
|
||||
//is a timer has been scheduled, the ID will be
|
||||
//from 0 to MAXTIMER-1
|
||||
Event ev;
|
||||
Event_init(&ev);
|
||||
Event_setTarget(&ev,target);
|
||||
Event_setPE(&ev,processEvent);
|
||||
Event_setId(&ev,id);
|
||||
Event_setDelay(&ev,delay);
|
||||
Event_setData(&ev,data);
|
||||
XF_pushEvent(ev,false,&tmid);
|
||||
return tmid;
|
||||
}
|
||||
|
||||
void XF_executeOnce()
|
||||
{
|
||||
Event ev = XF_popEvent(false);
|
||||
//if this event is valid
|
||||
if (ev.id != NULLEVENT)
|
||||
{
|
||||
//if this event has a valid target
|
||||
//if (ev.target != NULL)
|
||||
//{
|
||||
//if this event has a valid state machine
|
||||
//function pointer
|
||||
if (ev.processEvent != NULL)
|
||||
{
|
||||
//call the state machine method function
|
||||
//and pass the event as parameter
|
||||
ev.processEvent(&ev);
|
||||
}
|
||||
//}
|
||||
}
|
||||
}
|
84
03-software/ch/kb28/blinkerProject/xf/xf.h
Executable file
84
03-software/ch/kb28/blinkerProject/xf/xf.h
Executable file
@ -0,0 +1,84 @@
|
||||
/******************************************************************************/
|
||||
/* FILENAME : xf.h */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* GOAL : Offers the femto XF functions */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* AUTHOR : Medard Rieder / Pascal Sartoretti */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* DATE: : original (Medard Rieder 08.2011) */
|
||||
/* corrections & simplified (Pascal Sartoretti 06.2016) */
|
||||
/******************************************************************************/
|
||||
#ifndef XF_DEF
|
||||
#define XF_DEF
|
||||
|
||||
#include <stdint.h> // usage of standard types
|
||||
#include <stdbool.h> // usage of boolean types
|
||||
#include "../mcc_generated_files/mcc.h"
|
||||
#include "event.h"
|
||||
|
||||
#define Time uint16_t // time type
|
||||
#define TimerID uint8_t // identifier of timer (position in buffer)
|
||||
|
||||
typedef struct Timer_ // timer structure
|
||||
{
|
||||
Time tm; // time
|
||||
Event ev; // event to post
|
||||
} Timer;
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* depending on usage, change MAXTIMER and MAXEVENT */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
#define MAXTIMER 8 // number of timers in our system
|
||||
#define MAXEVENT 12 // number of events in our system
|
||||
|
||||
#define NULLTIMER 0 // no value for time
|
||||
#define TICKINTERVAL 10 // this is the ticktimers duration
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
typedef struct XF // the XF structure
|
||||
{
|
||||
Timer timerList[MAXTIMER]; // the timers
|
||||
Event eventQueue[MAXEVENT]; // the events
|
||||
uint8_t in; // the events in pointer
|
||||
uint8_t out; // the events out pointer
|
||||
} XF;
|
||||
|
||||
/******************************************************************************/
|
||||
/* FUNCTION : Init the XF structure */
|
||||
/* INPUT : - */
|
||||
/* OUTPUT : - */
|
||||
/* COMMENTS : Have to be called once */
|
||||
/******************************************************************************/
|
||||
void XF_init();
|
||||
|
||||
/******************************************************************************/
|
||||
/* FUNCTION : Remove a timer in timers queue */
|
||||
/* INPUT : id - the timer id to remove */
|
||||
/* inISR - (true if called in an ISR, else false) */
|
||||
/* OUTPUT : - */
|
||||
/* COMMENTS : - */
|
||||
/******************************************************************************/
|
||||
void XF_unscheduleTimer(TimerID id, bool inISR);
|
||||
/******************************************************************************/
|
||||
/* FUNCTION : Decrement timers to post events if time elapsed */
|
||||
/* INPUT : - */
|
||||
/* OUTPUT : - */
|
||||
/* COMMENTS : This function has to be called from the timer ISR */
|
||||
/******************************************************************************/
|
||||
void XF_decrementAndQueueTimers();
|
||||
|
||||
/********************************************************************************/
|
||||
/* FUNCTION : POST an Event */
|
||||
/* INPUT : target - the address of the object with the state machine */
|
||||
/* processEvent - function pointer of the state machine function */
|
||||
/* id - the id of the event */
|
||||
/* delay - the delay if the event is a timeout event */
|
||||
/* data - user data */
|
||||
/* OUTPUT : TimerId - the id of the timeout if the event is a timeout */
|
||||
/* COMMENTS : */
|
||||
/********************************************************************************/
|
||||
TimerID POST(void* target, processEventT processEvent, uint8_t id, Time delay, int64_t data);
|
||||
|
||||
void XF_executeOnce();
|
||||
#endif
|
||||
|
226
03-software/nbproject/configurations.xml
Normal file
226
03-software/nbproject/configurations.xml
Normal file
@ -0,0 +1,226 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configurationDescriptor version="65">
|
||||
<logicalFolder name="root" displayName="root" projectFiles="true">
|
||||
<logicalFolder name="HeaderFiles"
|
||||
displayName="Header Files"
|
||||
projectFiles="true">
|
||||
<logicalFolder name="app" displayName="app" projectFiles="true">
|
||||
<logicalFolder name="factory" displayName="factory" projectFiles="true">
|
||||
<itemPath>ch/kb28/blinkerProject/app/factory/factory.h</itemPath>
|
||||
</logicalFolder>
|
||||
<itemPath>ch/kb28/blinkerProject/app/ledblinker.h</itemPath>
|
||||
</logicalFolder>
|
||||
<logicalFolder name="board" displayName="board" projectFiles="true">
|
||||
<logicalFolder name="led" displayName="led" projectFiles="true">
|
||||
<itemPath>ch/kb28/blinkerProject/board/led/led.h</itemPath>
|
||||
</logicalFolder>
|
||||
</logicalFolder>
|
||||
<logicalFolder name="mcc_generated_files"
|
||||
displayName="mcc_generated_files"
|
||||
projectFiles="true">
|
||||
<itemPath>ch/kb28/blinkerProject/mcc_generated_files/tmr0.h</itemPath>
|
||||
<itemPath>ch/kb28/blinkerProject/mcc_generated_files/pin_manager.h</itemPath>
|
||||
<itemPath>ch/kb28/blinkerProject/mcc_generated_files/mcc.h</itemPath>
|
||||
<itemPath>ch/kb28/blinkerProject/mcc_generated_files/interrupt_manager.h</itemPath>
|
||||
<itemPath>ch/kb28/blinkerProject/mcc_generated_files/device_config.h</itemPath>
|
||||
</logicalFolder>
|
||||
<logicalFolder name="middleware" displayName="middleware" projectFiles="true">
|
||||
</logicalFolder>
|
||||
<logicalFolder name="xf" displayName="xf" projectFiles="true">
|
||||
<itemPath>ch/kb28/blinkerProject/xf/ireactive.h</itemPath>
|
||||
<itemPath>ch/kb28/blinkerProject/xf/event.h</itemPath>
|
||||
<itemPath>ch/kb28/blinkerProject/xf/xf.h</itemPath>
|
||||
</logicalFolder>
|
||||
</logicalFolder>
|
||||
<logicalFolder name="LinkerScript"
|
||||
displayName="Linker Files"
|
||||
projectFiles="true">
|
||||
</logicalFolder>
|
||||
<logicalFolder name="SourceFiles"
|
||||
displayName="Source Files"
|
||||
projectFiles="true">
|
||||
<logicalFolder name="app" displayName="app" projectFiles="true">
|
||||
<logicalFolder name="factory" displayName="factory" projectFiles="true">
|
||||
<itemPath>ch/kb28/blinkerProject/app/factory/factory.c</itemPath>
|
||||
</logicalFolder>
|
||||
<itemPath>ch/kb28/blinkerProject/app/lebblinker.c</itemPath>
|
||||
<itemPath>ch/kb28/blinkerProject/app/main.c</itemPath>
|
||||
</logicalFolder>
|
||||
<logicalFolder name="board" displayName="board" projectFiles="true">
|
||||
<logicalFolder name="led" displayName="led" projectFiles="true">
|
||||
<itemPath>ch/kb28/blinkerProject/board/led/led.c</itemPath>
|
||||
</logicalFolder>
|
||||
</logicalFolder>
|
||||
<logicalFolder name="mcc_generated_files"
|
||||
displayName="mcc_generated_files"
|
||||
projectFiles="true">
|
||||
<itemPath>ch/kb28/blinkerProject/mcc_generated_files/mcc.c</itemPath>
|
||||
<itemPath>ch/kb28/blinkerProject/mcc_generated_files/interrupt_manager.c</itemPath>
|
||||
<itemPath>ch/kb28/blinkerProject/mcc_generated_files/device_config.c</itemPath>
|
||||
<itemPath>ch/kb28/blinkerProject/mcc_generated_files/pin_manager.c</itemPath>
|
||||
<itemPath>ch/kb28/blinkerProject/mcc_generated_files/tmr0.c</itemPath>
|
||||
</logicalFolder>
|
||||
<logicalFolder name="middleware" displayName="middleware" projectFiles="true">
|
||||
</logicalFolder>
|
||||
<logicalFolder name="xf" displayName="xf" projectFiles="true">
|
||||
<itemPath>ch/kb28/blinkerProject/xf/xf.c</itemPath>
|
||||
<itemPath>ch/kb28/blinkerProject/xf/event.c</itemPath>
|
||||
</logicalFolder>
|
||||
</logicalFolder>
|
||||
<logicalFolder name="ExternalFiles"
|
||||
displayName="Important Files"
|
||||
projectFiles="false">
|
||||
<itemPath>Makefile</itemPath>
|
||||
</logicalFolder>
|
||||
</logicalFolder>
|
||||
<sourceRootList>
|
||||
<Elem>.</Elem>
|
||||
</sourceRootList>
|
||||
<projectmakefile>Makefile</projectmakefile>
|
||||
<confs>
|
||||
<conf name="default" type="2">
|
||||
<toolsSet>
|
||||
<developmentServer>localhost</developmentServer>
|
||||
<targetDevice>PIC18F87K22</targetDevice>
|
||||
<targetHeader></targetHeader>
|
||||
<targetPluginBoard></targetPluginBoard>
|
||||
<platformTool>noID</platformTool>
|
||||
<languageToolchain>XC8</languageToolchain>
|
||||
<languageToolchainVersion>2.41</languageToolchainVersion>
|
||||
<platform>2</platform>
|
||||
</toolsSet>
|
||||
<packs>
|
||||
<pack name="PIC18F-K_DFP" vendor="Microchip" version="1.7.134"/>
|
||||
</packs>
|
||||
<ScriptingSettings>
|
||||
</ScriptingSettings>
|
||||
<compileType>
|
||||
<linkerTool>
|
||||
<linkerLibItems>
|
||||
</linkerLibItems>
|
||||
</linkerTool>
|
||||
<archiverTool>
|
||||
</archiverTool>
|
||||
<loading>
|
||||
<useAlternateLoadableFile>false</useAlternateLoadableFile>
|
||||
<parseOnProdLoad>false</parseOnProdLoad>
|
||||
<alternateLoadableFile></alternateLoadableFile>
|
||||
</loading>
|
||||
<subordinates>
|
||||
</subordinates>
|
||||
</compileType>
|
||||
<makeCustomizationType>
|
||||
<makeCustomizationPreStepEnabled>false</makeCustomizationPreStepEnabled>
|
||||
<makeUseCleanTarget>false</makeUseCleanTarget>
|
||||
<makeCustomizationPreStep></makeCustomizationPreStep>
|
||||
<makeCustomizationPostStepEnabled>false</makeCustomizationPostStepEnabled>
|
||||
<makeCustomizationPostStep></makeCustomizationPostStep>
|
||||
<makeCustomizationPutChecksumInUserID>false</makeCustomizationPutChecksumInUserID>
|
||||
<makeCustomizationEnableLongLines>false</makeCustomizationEnableLongLines>
|
||||
<makeCustomizationNormalizeHexFile>false</makeCustomizationNormalizeHexFile>
|
||||
</makeCustomizationType>
|
||||
<HI-TECH-COMP>
|
||||
<property key="additional-warnings" value="true"/>
|
||||
<property key="asmlist" value="true"/>
|
||||
<property key="call-prologues" value="false"/>
|
||||
<property key="default-bitfield-type" value="true"/>
|
||||
<property key="default-char-type" value="true"/>
|
||||
<property key="define-macros" value=""/>
|
||||
<property key="disable-optimizations" value="true"/>
|
||||
<property key="extra-include-directories" value=""/>
|
||||
<property key="favor-optimization-for" value="-speed,+space"/>
|
||||
<property key="garbage-collect-data" value="true"/>
|
||||
<property key="garbage-collect-functions" value="true"/>
|
||||
<property key="identifier-length" value="255"/>
|
||||
<property key="local-generation" value="false"/>
|
||||
<property key="operation-mode" value="free"/>
|
||||
<property key="opt-xc8-compiler-strict_ansi" value="false"/>
|
||||
<property key="optimization-assembler" value="true"/>
|
||||
<property key="optimization-assembler-files" value="true"/>
|
||||
<property key="optimization-debug" value="false"/>
|
||||
<property key="optimization-invariant-enable" value="false"/>
|
||||
<property key="optimization-invariant-value" value="16"/>
|
||||
<property key="optimization-level" value="-O0"/>
|
||||
<property key="optimization-speed" value="false"/>
|
||||
<property key="optimization-stable-enable" value="false"/>
|
||||
<property key="preprocess-assembler" value="true"/>
|
||||
<property key="short-enums" value="true"/>
|
||||
<property key="tentative-definitions" value="-fno-common"/>
|
||||
<property key="undefine-macros" value=""/>
|
||||
<property key="use-cci" value="false"/>
|
||||
<property key="use-iar" value="false"/>
|
||||
<property key="verbose" value="false"/>
|
||||
<property key="warning-level" value="-3"/>
|
||||
<property key="what-to-do" value="ignore"/>
|
||||
</HI-TECH-COMP>
|
||||
<HI-TECH-LINK>
|
||||
<property key="additional-options-checksum" value=""/>
|
||||
<property key="additional-options-code-offset" value=""/>
|
||||
<property key="additional-options-command-line" value=""/>
|
||||
<property key="additional-options-errata" value=""/>
|
||||
<property key="additional-options-extend-address" value="false"/>
|
||||
<property key="additional-options-trace-type" value=""/>
|
||||
<property key="additional-options-use-response-files" value="false"/>
|
||||
<property key="backup-reset-condition-flags" value="false"/>
|
||||
<property key="calibrate-oscillator" value="false"/>
|
||||
<property key="calibrate-oscillator-value" value="0x3400"/>
|
||||
<property key="clear-bss" value="true"/>
|
||||
<property key="code-model-external" value="wordwrite"/>
|
||||
<property key="code-model-rom" value=""/>
|
||||
<property key="create-html-files" value="false"/>
|
||||
<property key="data-model-ram" value=""/>
|
||||
<property key="data-model-size-of-double" value="32"/>
|
||||
<property key="data-model-size-of-double-gcc" value="no-short-double"/>
|
||||
<property key="data-model-size-of-float" value="32"/>
|
||||
<property key="data-model-size-of-float-gcc" value="no-short-float"/>
|
||||
<property key="display-class-usage" value="false"/>
|
||||
<property key="display-hex-usage" value="false"/>
|
||||
<property key="display-overall-usage" value="true"/>
|
||||
<property key="display-psect-usage" value="false"/>
|
||||
<property key="extra-lib-directories" value=""/>
|
||||
<property key="fill-flash-options-addr" value=""/>
|
||||
<property key="fill-flash-options-const" value=""/>
|
||||
<property key="fill-flash-options-how" value="0"/>
|
||||
<property key="fill-flash-options-inc-const" value="1"/>
|
||||
<property key="fill-flash-options-increment" value=""/>
|
||||
<property key="fill-flash-options-seq" value=""/>
|
||||
<property key="fill-flash-options-what" value="0"/>
|
||||
<property key="format-hex-file-for-download" value="false"/>
|
||||
<property key="initialize-data" value="true"/>
|
||||
<property key="input-libraries" value="libm"/>
|
||||
<property key="keep-generated-startup.as" value="false"/>
|
||||
<property key="link-in-c-library" value="true"/>
|
||||
<property key="link-in-c-library-gcc" value=""/>
|
||||
<property key="link-in-peripheral-library" value="false"/>
|
||||
<property key="managed-stack" value="false"/>
|
||||
<property key="opt-xc8-linker-file" value="false"/>
|
||||
<property key="opt-xc8-linker-link_startup" value="false"/>
|
||||
<property key="opt-xc8-linker-serial" value=""/>
|
||||
<property key="program-the-device-with-default-config-words" value="true"/>
|
||||
<property key="remove-unused-sections" value="true"/>
|
||||
</HI-TECH-LINK>
|
||||
<XC8-CO>
|
||||
<property key="coverage-enable" value=""/>
|
||||
<property key="stack-guidance" value="false"/>
|
||||
</XC8-CO>
|
||||
<XC8-config-global>
|
||||
<property key="advanced-elf" value="true"/>
|
||||
<property key="constdata-progmem" value="true"/>
|
||||
<property key="gcc-opt-driver-new" value="true"/>
|
||||
<property key="gcc-opt-std" value="-std=c99"/>
|
||||
<property key="gcc-output-file-format" value="dwarf-3"/>
|
||||
<property key="mapped-progmem" value="false"/>
|
||||
<property key="omit-pack-options" value="false"/>
|
||||
<property key="omit-pack-options-new" value="1"/>
|
||||
<property key="output-file-format" value="-mcof,+elf"/>
|
||||
<property key="smart-io-format" value=""/>
|
||||
<property key="stack-size-high" value="auto"/>
|
||||
<property key="stack-size-low" value="auto"/>
|
||||
<property key="stack-size-main" value="auto"/>
|
||||
<property key="stack-type" value="compiled"/>
|
||||
<property key="user-pack-device-support" value=""/>
|
||||
<property key="wpo-lto" value="false"/>
|
||||
</XC8-config-global>
|
||||
</conf>
|
||||
</confs>
|
||||
</configurationDescriptor>
|
25
03-software/nbproject/project.xml
Normal file
25
03-software/nbproject/project.xml
Normal file
@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://www.netbeans.org/ns/project/1">
|
||||
<type>com.microchip.mplab.nbide.embedded.makeproject</type>
|
||||
<configuration>
|
||||
<data xmlns="http://www.netbeans.org/ns/make-project/1">
|
||||
<name>blinkerProject</name>
|
||||
<creation-uuid>e6abf760-f690-474e-bd73-664708ab92c9</creation-uuid>
|
||||
<make-project-type>0</make-project-type>
|
||||
<sourceEncoding>ISO-8859-1</sourceEncoding>
|
||||
<make-dep-projects/>
|
||||
<sourceRootList>
|
||||
<sourceRootElem>.</sourceRootElem>
|
||||
</sourceRootList>
|
||||
<confList>
|
||||
<confElem>
|
||||
<name>default</name>
|
||||
<type>2</type>
|
||||
</confElem>
|
||||
</confList>
|
||||
<formatting>
|
||||
<project-formatting-style>false</project-formatting-style>
|
||||
</formatting>
|
||||
</data>
|
||||
</configuration>
|
||||
</project>
|
Reference in New Issue
Block a user