add initial dmb fw. improve makefile infrastructure.
This commit is contained in:
parent
0f5947ee39
commit
5b02acc863
@ -1,11 +1,33 @@
|
|||||||
DIRS = lib fw
|
FW_DIRS = $(wildcard fw_*)
|
||||||
|
COMMON_DIRS = lib
|
||||||
|
PROJECT_DEFAULT = atlys
|
||||||
|
PROJECT_NAME ?= $(PROJECT_DEFAULT)
|
||||||
|
PROJECT_DIR = fw_$(PROJECT_NAME)
|
||||||
|
DIRS = $(COMMON_DIRS) $(PROJECT_DIR)
|
||||||
|
|
||||||
all:
|
##### PRINT ###################################
|
||||||
@for dir in $(DIRS); do \
|
PW=\033[1m\033[0m
|
||||||
$(MAKE) -C $$dir || exit 1; \
|
GR=\E[40;32m
|
||||||
done
|
WH=\E[40;37m
|
||||||
|
B=\033[1m
|
||||||
|
pr_info = "$(B) $(GR)[$(1)]\t $(WH)$(2)$(PW)"
|
||||||
|
|
||||||
clean:
|
##### BUILD RULES #############################
|
||||||
@for dir in $(DIRS); do \
|
.PHONY: help build clean build_all distclean
|
||||||
$(MAKE) -C $$dir clean || exit 1; \
|
|
||||||
done
|
help:
|
||||||
|
@echo -e "$$ make PROJECT_NAME=<top-file> <rule>"
|
||||||
|
@echo -e "\tprojects (*=default) .. : $(shell echo $(FW_DIRS) | sed 's/fw_//g' | sed 's/$(PROJECT_DEFAULT)/\*$(PROJECT_DEFAULT)/')"
|
||||||
|
@echo -e "\trule .................. : help build clean build_all distclean"
|
||||||
|
|
||||||
|
build: $(DIRS)
|
||||||
|
@$(foreach dir,$^, echo -e $(call pr_info,MK,Building $(dir)); $(MAKE) -C $(dir) || exit 1;)
|
||||||
|
|
||||||
|
clean: $(DIRS)
|
||||||
|
@$(foreach dir,$^, echo -e $(call pr_info,MK,Cleaning $(dir)); $(MAKE) -C $(dir) clean || exit 1;)
|
||||||
|
|
||||||
|
build_all: $(COMMON_DIRS) $(FW_DIRS)
|
||||||
|
@$(foreach dir,$^, echo -e $(call pr_info,MK,Building $(dir)); $(MAKE) -C $(dir) || exit 1;)
|
||||||
|
|
||||||
|
distclean: $(COMMON_DIRS) $(FW_DIRS)
|
||||||
|
@$(foreach dir,$^, echo -e $(call pr_info,MK,Cleaning $(dir)); $(MAKE) -C $(dir) clean || exit 1;)
|
||||||
|
9
firmware/fw_dmb/.gitignore
vendored
Normal file
9
firmware/fw_dmb/.gitignore
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
*.asm
|
||||||
|
*.lst
|
||||||
|
*.rel
|
||||||
|
*.rst
|
||||||
|
*.sym
|
||||||
|
*.map
|
||||||
|
*.mem
|
||||||
|
*.bix
|
||||||
|
*.iic
|
5
firmware/fw_dmb/Makefile
Normal file
5
firmware/fw_dmb/Makefile
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
SOURCES = fw.c device.c
|
||||||
|
A51_SOURCES = dscr.a51
|
||||||
|
BASENAME = firmware
|
||||||
|
|
||||||
|
include ../lib/fx2.mk
|
127
firmware/fw_dmb/device.c
Normal file
127
firmware/fw_dmb/device.c
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
#include <fx2macros.h>
|
||||||
|
#include <delay.h>
|
||||||
|
|
||||||
|
#ifdef DEBUG_FIRMWARE
|
||||||
|
#include <stdio.h>
|
||||||
|
#else
|
||||||
|
#define printf(...)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//************************** Configuration Handlers *****************************
|
||||||
|
// change to support as many interfaces as you need
|
||||||
|
//volatile xdata BYTE interface=0;
|
||||||
|
//volatile xdata BYTE alt=0; // alt interface
|
||||||
|
|
||||||
|
// set *alt_ifc to the current alt interface for ifc
|
||||||
|
BOOL
|
||||||
|
handle_get_interface(BYTE ifc, BYTE * alt_ifc)
|
||||||
|
{
|
||||||
|
// *alt_ifc=alt;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// return TRUE if you set the interface requested
|
||||||
|
// NOTE this function should reconfigure and reset the endpoints
|
||||||
|
// according to the interface descriptors you provided.
|
||||||
|
BOOL
|
||||||
|
handle_set_interface(BYTE ifc, BYTE alt_ifc)
|
||||||
|
{
|
||||||
|
printf("Set Interface.\n");
|
||||||
|
//interface=ifc;
|
||||||
|
//alt=alt_ifc;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// handle getting and setting the configuration
|
||||||
|
// 1 is the default. If you support more than one config
|
||||||
|
// keep track of the config number and return the correct number
|
||||||
|
// config numbers are set int the dscr file.
|
||||||
|
//volatile BYTE config=1;
|
||||||
|
BYTE
|
||||||
|
handle_get_configuration()
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOTE changing config requires the device to reset all the endpoints
|
||||||
|
BOOL
|
||||||
|
handle_set_configuration(BYTE cfg)
|
||||||
|
{
|
||||||
|
printf("Set Configuration.\n");
|
||||||
|
//config=cfg;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
//******************* VENDOR COMMAND HANDLERS **************************
|
||||||
|
BOOL
|
||||||
|
handle_vendorcommand(BYTE cmd)
|
||||||
|
{
|
||||||
|
switch (cmd) {
|
||||||
|
// case VC_EPSTAT:
|
||||||
|
// break;
|
||||||
|
default:
|
||||||
|
printf ( "Need to implement vendor command: %02x\n", cmd );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* not handled by handlers */
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
//******************** INIT ***********************
|
||||||
|
void
|
||||||
|
main_init()
|
||||||
|
{
|
||||||
|
SYNCDELAY4; REVCTL = 0x03;
|
||||||
|
|
||||||
|
/* set register default values */
|
||||||
|
SYNCDELAY4; PINFLAGSAB = 0x00;
|
||||||
|
SYNCDELAY4; PINFLAGSCD = 0x00;
|
||||||
|
SYNCDELAY4; FIFOPINPOLAR = 0x00;
|
||||||
|
|
||||||
|
/* SLAVE FIFO (set bmIFCLKPOL to ensure better setup times) */
|
||||||
|
SYNCDELAY4; IFCONFIG = bmIFCLKSRC | bm3048MHZ | bmIFCLKOE | (bmIFCFG1 | bmIFCFG0);
|
||||||
|
|
||||||
|
/* only valid endpoints are 2/6 */
|
||||||
|
/* EP2 is DIR=OUT, TYPE=BULK, SIZE=512, BUF=2x (HOST->DEVICE) */
|
||||||
|
SYNCDELAY4; EP2CFG = 0xa2;
|
||||||
|
|
||||||
|
/* slave fifo configuration 8bit, autoout */
|
||||||
|
//SYNCDELAY4; EP2FIFOCFG &= ~bmWORDWIDE;
|
||||||
|
SYNCDELAY4; EP2FIFOCFG = bmAUTOOUT;
|
||||||
|
SYNCDELAY4; EP2AUTOINLENH = 0x00;
|
||||||
|
SYNCDELAY4; EP2AUTOINLENL = 0x00;
|
||||||
|
/* EP6 is DIR=IN, TYPE=BULK, SIZE=512, BUF=2x (DEVICE->HOST) */
|
||||||
|
SYNCDELAY4; EP6CFG = 0xe2;
|
||||||
|
/* slave fifo configuration 8bit, autoin, zero length */
|
||||||
|
//SYNCDELAY4; EP6FIFOCFG &= ~bmWORDWIDE;
|
||||||
|
SYNCDELAY4; EP6FIFOCFG = bmAUTOIN | bmZEROLENIN;
|
||||||
|
/* AUTOIN packet length (512byte) */
|
||||||
|
SYNCDELAY4; EP6AUTOINLENH = 0x02;
|
||||||
|
SYNCDELAY4; EP6AUTOINLENL = 0x00;
|
||||||
|
|
||||||
|
/* unused fifos */
|
||||||
|
SYNCDELAY4; EP4FIFOCFG = 0;
|
||||||
|
SYNCDELAY4; EP8FIFOCFG = 0;
|
||||||
|
|
||||||
|
/* deactive other endpoints */
|
||||||
|
SYNCDELAY4; EP1INCFG &= ~bmVALID;
|
||||||
|
SYNCDELAY4; EP1OUTCFG &= ~bmVALID;
|
||||||
|
SYNCDELAY4; EP4CFG &= ~bmVALID;
|
||||||
|
SYNCDELAY4; EP8CFG &= ~bmVALID;
|
||||||
|
|
||||||
|
/* Reset the FIFO */
|
||||||
|
SYNCDELAY4; FIFORESET = 0x80;
|
||||||
|
SYNCDELAY4; FIFORESET = 0x82;
|
||||||
|
SYNCDELAY4; FIFORESET = 0x84;
|
||||||
|
SYNCDELAY4; FIFORESET = 0x86;
|
||||||
|
SYNCDELAY4; FIFORESET = 0x00;
|
||||||
|
SYNCDELAY4;
|
||||||
|
|
||||||
|
printf("Initialization Done.\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
main_loop()
|
||||||
|
{
|
||||||
|
// do some work
|
||||||
|
}
|
189
firmware/fw_dmb/dscr.a51
Normal file
189
firmware/fw_dmb/dscr.a51
Normal file
@ -0,0 +1,189 @@
|
|||||||
|
.module DEV_DSCR
|
||||||
|
|
||||||
|
; descriptor types
|
||||||
|
; same as setupdat.h
|
||||||
|
DSCR_DEVICE_TYPE=1
|
||||||
|
DSCR_CONFIG_TYPE=2
|
||||||
|
DSCR_STRING_TYPE=3
|
||||||
|
DSCR_INTERFACE_TYPE=4
|
||||||
|
DSCR_ENDPOINT_TYPE=5
|
||||||
|
DSCR_DEVQUAL_TYPE=6
|
||||||
|
|
||||||
|
; for the repeating interfaces
|
||||||
|
DSCR_INTERFACE_LEN=9
|
||||||
|
DSCR_ENDPOINT_LEN=7
|
||||||
|
|
||||||
|
; endpoint types
|
||||||
|
ENDPOINT_TYPE_CONTROL=0
|
||||||
|
ENDPOINT_TYPE_ISO=1
|
||||||
|
ENDPOINT_TYPE_BULK=2
|
||||||
|
ENDPOINT_TYPE_INT=3
|
||||||
|
|
||||||
|
.globl _dev_dscr, _dev_qual_dscr, _highspd_dscr, _fullspd_dscr, _dev_strings, _dev_strings_end
|
||||||
|
; These need to be in code memory. If
|
||||||
|
; they aren't you'll have to manully copy them somewhere
|
||||||
|
; in code memory otherwise SUDPTRH:L don't work right
|
||||||
|
.area DSCR_AREA (CODE)
|
||||||
|
|
||||||
|
_dev_dscr:
|
||||||
|
.db dev_dscr_end-_dev_dscr ; len
|
||||||
|
.db DSCR_DEVICE_TYPE ; type
|
||||||
|
.dw 0x0002 ; usb 2.0
|
||||||
|
.db 0xff ; class (vendor specific)
|
||||||
|
.db 0xff ; subclass (vendor specific)
|
||||||
|
.db 0xff ; protocol (vendor specific)
|
||||||
|
.db 64 ; packet size (ep0)
|
||||||
|
.dw 0xB404 ; vendor id
|
||||||
|
.dw 0x4223 ; product id
|
||||||
|
.dw 0x0100 ; version id
|
||||||
|
.db 1 ; manufacturure str idx
|
||||||
|
.db 2 ; product str idx
|
||||||
|
.db 0 ; serial str idx
|
||||||
|
.db 1 ; n configurations
|
||||||
|
dev_dscr_end:
|
||||||
|
|
||||||
|
_dev_qual_dscr:
|
||||||
|
.db dev_qualdscr_end-_dev_qual_dscr
|
||||||
|
.db DSCR_DEVQUAL_TYPE
|
||||||
|
.dw 0x0002 ; usb 2.0
|
||||||
|
.db 0xff
|
||||||
|
.db 0xff
|
||||||
|
.db 0xff
|
||||||
|
.db 64 ; max packet
|
||||||
|
.db 1 ; n configs
|
||||||
|
.db 0 ; extra reserved byte
|
||||||
|
dev_qualdscr_end:
|
||||||
|
|
||||||
|
_highspd_dscr:
|
||||||
|
.db highspd_dscr_end-_highspd_dscr ; dscr len ;; Descriptor length
|
||||||
|
.db DSCR_CONFIG_TYPE
|
||||||
|
; can't use .dw because byte order is different
|
||||||
|
.db (highspd_dscr_realend-_highspd_dscr) % 256 ; total length of config lsb
|
||||||
|
.db (highspd_dscr_realend-_highspd_dscr) / 256 ; total length of config msb
|
||||||
|
.db 1 ; n interfaces
|
||||||
|
.db 1 ; config number
|
||||||
|
.db 0 ; config string
|
||||||
|
.db 0x80 ; attrs = bus powered, no wakeup
|
||||||
|
.db 0x32 ; max power = 100ma
|
||||||
|
highspd_dscr_end:
|
||||||
|
|
||||||
|
; all the interfaces next
|
||||||
|
; NOTE the default TRM actually has more alt interfaces
|
||||||
|
; but you can add them back in if you need them.
|
||||||
|
; here, we just use the default alt setting 1 from the trm
|
||||||
|
.db DSCR_INTERFACE_LEN
|
||||||
|
.db DSCR_INTERFACE_TYPE
|
||||||
|
.db 0 ; index
|
||||||
|
.db 0 ; alt setting idx
|
||||||
|
.db 2 ; n endpoints
|
||||||
|
.db 0xff ; class
|
||||||
|
.db 0xff
|
||||||
|
.db 0xff
|
||||||
|
.db 0 ; string index
|
||||||
|
|
||||||
|
; endpoint 2 out
|
||||||
|
.db DSCR_ENDPOINT_LEN
|
||||||
|
.db DSCR_ENDPOINT_TYPE
|
||||||
|
.db 0x02 ; ep2 dir=OUT and address
|
||||||
|
.db ENDPOINT_TYPE_BULK ; type
|
||||||
|
.db 0x00 ; max packet LSB
|
||||||
|
.db 0x02 ; max packet size=512 bytes
|
||||||
|
.db 0x00 ; polling interval
|
||||||
|
|
||||||
|
; endpoint 6 in
|
||||||
|
.db DSCR_ENDPOINT_LEN
|
||||||
|
.db DSCR_ENDPOINT_TYPE
|
||||||
|
.db 0x86 ; ep6 dir=in and address
|
||||||
|
.db ENDPOINT_TYPE_BULK ; type
|
||||||
|
.db 0x00 ; max packet LSB
|
||||||
|
.db 0x02 ; max packet size=512 bytes
|
||||||
|
.db 0x00 ; polling interval
|
||||||
|
|
||||||
|
highspd_dscr_realend:
|
||||||
|
|
||||||
|
.even
|
||||||
|
_fullspd_dscr:
|
||||||
|
.db fullspd_dscr_end-_fullspd_dscr ; dscr len
|
||||||
|
.db DSCR_CONFIG_TYPE
|
||||||
|
; can't use .dw because byte order is different
|
||||||
|
.db (fullspd_dscr_realend-_fullspd_dscr) % 256 ; total length of config lsb
|
||||||
|
.db (fullspd_dscr_realend-_fullspd_dscr) / 256 ; total length of config msb
|
||||||
|
.db 1 ; n interfaces
|
||||||
|
.db 1 ; config number
|
||||||
|
.db 0 ; config string
|
||||||
|
.db 0x80 ; attrs = bus powered, no wakeup
|
||||||
|
.db 0x32 ; max power = 100ma
|
||||||
|
fullspd_dscr_end:
|
||||||
|
|
||||||
|
; all the interfaces next
|
||||||
|
; NOTE the default TRM actually has more alt interfaces
|
||||||
|
; but you can add them back in if you need them.
|
||||||
|
; here, we just use the default alt setting 1 from the trm
|
||||||
|
.db DSCR_INTERFACE_LEN
|
||||||
|
.db DSCR_INTERFACE_TYPE
|
||||||
|
.db 0 ; index
|
||||||
|
.db 0 ; alt setting idx
|
||||||
|
.db 2 ; n endpoints
|
||||||
|
.db 0xff ; class
|
||||||
|
.db 0xff
|
||||||
|
.db 0xff
|
||||||
|
.db 1 ; string index
|
||||||
|
|
||||||
|
; endpoint 2 out
|
||||||
|
.db DSCR_ENDPOINT_LEN
|
||||||
|
.db DSCR_ENDPOINT_TYPE
|
||||||
|
.db 0x02 ; ep2 dir=OUT and address
|
||||||
|
.db ENDPOINT_TYPE_BULK ; type
|
||||||
|
.db 0x40 ; max packet LSB
|
||||||
|
.db 0x00 ; max packet size=64 bytes
|
||||||
|
.db 0x00 ; polling interval
|
||||||
|
|
||||||
|
; endpoint 6 in
|
||||||
|
.db DSCR_ENDPOINT_LEN
|
||||||
|
.db DSCR_ENDPOINT_TYPE
|
||||||
|
.db 0x86 ; ep6 dir=in and address
|
||||||
|
.db ENDPOINT_TYPE_BULK ; type
|
||||||
|
.db 0x40 ; max packet LSB
|
||||||
|
.db 0x00 ; max packet size=64 bytes
|
||||||
|
.db 0x00 ; polling interval
|
||||||
|
fullspd_dscr_realend:
|
||||||
|
|
||||||
|
.even
|
||||||
|
_dev_strings:
|
||||||
|
; sample string
|
||||||
|
_string0:
|
||||||
|
.db string0end-_string0 ; len
|
||||||
|
.db DSCR_STRING_TYPE
|
||||||
|
.db 0x09, 0x04 ; 0x0409 is the language code for English. Possible to add more codes after this.
|
||||||
|
string0end:
|
||||||
|
; add more strings here
|
||||||
|
_string1:
|
||||||
|
.db _string1end-_string1 ;; len
|
||||||
|
.db DSCR_STRING_TYPE
|
||||||
|
.db 'D',00
|
||||||
|
.db 'M',00
|
||||||
|
.db 'B',00
|
||||||
|
.db '',00
|
||||||
|
.db 'M',00
|
||||||
|
.db 'O',00
|
||||||
|
.db 'D',00
|
||||||
|
.db 'U',00
|
||||||
|
.db 'L',00
|
||||||
|
.db 'E',00
|
||||||
|
_string1end:
|
||||||
|
_string2:
|
||||||
|
.db _string2end-_string2 ;; len
|
||||||
|
.db DSCR_STRING_TYPE
|
||||||
|
.db 'V',00
|
||||||
|
.db 'E',00
|
||||||
|
.db 'R',00
|
||||||
|
.db 'S',00
|
||||||
|
.db 'I',00
|
||||||
|
.db 'O',00
|
||||||
|
.db 'N',00
|
||||||
|
.db '',00
|
||||||
|
.db 'X',00
|
||||||
|
_string2end:
|
||||||
|
|
||||||
|
_dev_strings_end:
|
||||||
|
.dw 0x0000 ; in case you wanted to look at memory between _dev_strings and _dev_strings_end
|
119
firmware/fw_dmb/fw.c
Normal file
119
firmware/fw_dmb/fw.c
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
#include <fx2macros.h>
|
||||||
|
#include <fx2ints.h>
|
||||||
|
#include <autovector.h>
|
||||||
|
#include <delay.h>
|
||||||
|
#include <setupdat.h>
|
||||||
|
|
||||||
|
#ifdef DEBUG_FIRMWARE
|
||||||
|
#include <serial.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#else
|
||||||
|
#define printf(...)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
volatile __bit dosud = FALSE;
|
||||||
|
volatile __bit dosuspend = FALSE;
|
||||||
|
|
||||||
|
// custom functions
|
||||||
|
extern void main_loop();
|
||||||
|
extern void main_init();
|
||||||
|
|
||||||
|
void
|
||||||
|
main()
|
||||||
|
{
|
||||||
|
|
||||||
|
#ifdef DEBUG_FIRMWARE
|
||||||
|
SETCPUFREQ(CLK_48M);
|
||||||
|
// main_init can still set this to whatever you want.
|
||||||
|
sio0_init(57600); // needed for printf if debug defined
|
||||||
|
#endif
|
||||||
|
|
||||||
|
main_init();
|
||||||
|
|
||||||
|
// set up interrupts.
|
||||||
|
USE_USB_INTS();
|
||||||
|
|
||||||
|
ENABLE_SUDAV();
|
||||||
|
ENABLE_USBRESET();
|
||||||
|
ENABLE_HISPEED();
|
||||||
|
ENABLE_SUSPEND();
|
||||||
|
ENABLE_RESUME();
|
||||||
|
|
||||||
|
/* global interrupt enable */
|
||||||
|
EA = 1;
|
||||||
|
|
||||||
|
// iic files (c2 load) don't need to renumerate/delay
|
||||||
|
// trm 3.6
|
||||||
|
#ifndef NORENUM
|
||||||
|
RENUMERATE();
|
||||||
|
#else
|
||||||
|
USBCS &= ~bmDISCON;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
while (TRUE) {
|
||||||
|
main_loop();
|
||||||
|
|
||||||
|
if (dosud) {
|
||||||
|
dosud = FALSE;
|
||||||
|
handle_setupdata();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dosuspend) {
|
||||||
|
dosuspend = FALSE;
|
||||||
|
do {
|
||||||
|
printf("I'm going to Suspend.\n");
|
||||||
|
WAKEUPCS |= bmWU | bmWU2; // make sure ext wakeups are cleared
|
||||||
|
SUSPEND = 1;
|
||||||
|
PCON |= 1;
|
||||||
|
__asm
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
__endasm;
|
||||||
|
} while (!remote_wakeup_allowed && REMOTE_WAKEUP());
|
||||||
|
printf("I'm going to wake up.\n");
|
||||||
|
|
||||||
|
// resume
|
||||||
|
// trm 6.4
|
||||||
|
if (REMOTE_WAKEUP()) {
|
||||||
|
delay(5);
|
||||||
|
USBCS |= bmSIGRESUME;
|
||||||
|
delay(15);
|
||||||
|
USBCS &= ~bmSIGRESUME;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
resume_isr() __interrupt RESUME_ISR {
|
||||||
|
CLEAR_RESUME();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
sudav_isr() __interrupt SUDAV_ISR {
|
||||||
|
dosud = TRUE;
|
||||||
|
CLEAR_SUDAV();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
usbreset_isr() __interrupt USBRESET_ISR {
|
||||||
|
handle_hispeed(FALSE);
|
||||||
|
CLEAR_USBRESET();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
hispeed_isr() __interrupt HISPEED_ISR {
|
||||||
|
handle_hispeed(TRUE);
|
||||||
|
CLEAR_HISPEED();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
suspend_isr() __interrupt SUSPEND_ISR {
|
||||||
|
dosuspend = TRUE;
|
||||||
|
CLEAR_SUSPEND();
|
||||||
|
}
|
@ -87,8 +87,9 @@ load: $(BUILDDIR)/$(BASENAME).bix
|
|||||||
#fxload -vvv -t fx2 -D /dev/bus/usb/002/003 -I $(BUILDDIR)/$(BASENAME).bix
|
#fxload -vvv -t fx2 -D /dev/bus/usb/002/003 -I $(BUILDDIR)/$(BASENAME).bix
|
||||||
#fxload -vvv -t fx2 -D /dev/bus/usb/002/003 -I build/firmware.ihx
|
#fxload -vvv -t fx2 -D /dev/bus/usb/002/003 -I build/firmware.ihx
|
||||||
|
|
||||||
|
#*.{asm,ihx,lnk,lst,map,mem,rel,rst,sym,adb,cdb,bix}
|
||||||
clean:
|
clean:
|
||||||
rm -f $(BUILDDIR)/*.{asm,ihx,lnk,lst,map,mem,rel,rst,sym,adb,cdb,bix}
|
rm -rf $(BUILDDIR)/
|
||||||
|
|
||||||
clean-all: clean
|
clean-all: clean
|
||||||
$(MAKE) -C $(FX2LIBDIR)/lib clean
|
$(MAKE) -C $(FX2LIBDIR)/lib clean
|
||||||
|
Loading…
Reference in New Issue
Block a user