📄 f326_usb0_touch.#1
字号:
//-----------------------------------------------------------------------------
// F326_USB0_Touch.c
//-----------------------------------------------------------------------------
//
// Source file for routines that touch data.
//
#include "c8051F326.h"
#include "F326_USB0_Touch.h"
#include "F326_USB0_Register.h"
#include "F326_USB0_InterruptServiceRoutine.h"
//-----------------------------------------------------------------------------
// Definitions
//-----------------------------------------------------------------------------
#define SYSCLK 12000000 // SYSCLK frequency in Hz
// USB clock selections (SFR CLKSEL)
#define USB_4X_CLOCK 0x00 // Select 4x clock multiplier, for USB
#define USB_INT_OSC_DIV_2 0x10 // Full Speed
#define USB_EXT_OSC 0x20
#define USB_EXT_OSC_DIV_2 0x30
#define USB_EXT_OSC_DIV_3 0x40
#define USB_EXT_OSC_DIV_4 0x50
// System clock selections (SFR CLKSEL)
#define SYS_INT_OSC 0x00 // Select to use internal oscillator
#define SYS_EXT_OSC 0x01 // Select to use an external oscillator
#define SYS_4X_DIV_2 0x02
//-----------------------------------------------------------------------------
// 16-bit SFR Definitions for 'F326
//-----------------------------------------------------------------------------
sfr16 TMR2RL = 0xca; // Timer2 reload value
sfr16 TMR2 = 0xcc; // Timer2 counter
//-----------------------------------------------------------------------------
// Local Definitions
//-----------------------------------------------------------------------------
#define Sw1 0x01 // These are the port2 bits for Sw1
#define Sw2 0x02 // and Sw2 on the development board
//-----------------------------------------------------------------------------
// Global Variable Declarations
//-----------------------------------------------------------------------------
// Last packet received from host
unsigned char xdata OUT_PACKET[OUT_PACKET_SIZE] = {0,0,0};
// Next packet to send to host
unsigned char xdata IN_PACKET[IN_PACKET_SIZE] = {0,0,0,0,0};
//-----------------------------------------------------------------------------
// Local Variable Declarations
//-----------------------------------------------------------------------------
unsigned char SWITCH_1_STATE = 0; // Indicate status of switch
unsigned char SWITCH_2_STATE = 0; // starting at 0 == off
unsigned char TOGGLE1 = 0; // Variable to make sure each button
unsigned char TOGGLE2 = 0; // press and release toggles switch
//-----------------------------------------------------------------------------
// Local Function Prototypes
//-----------------------------------------------------------------------------
void Sysclk_Init(void);
void Port_Init(void);
void UART_Init(void);
void USB0_Init(void);
void Delay(void);
//-----------------------------------------------------------------------------
// USB0_Init
//-----------------------------------------------------------------------------
//
// Return Value - None
// Parameters - None
//
// - Initialize USB0
// - Enable USB0 interrupts
// - Enable USB0 transceiver
// - Enable USB0 with suspend detection
//
// ----------------------------------------------------------------------------
void USB0_Init(void)
{
POLL_WRITE_BYTE(POWER, 0x08); // Force Asynchronous USB Reset
POLL_WRITE_BYTE(IN1IE, 0x03); // Enable Endpoint 0-1 in interrupts
POLL_WRITE_BYTE(OUT1IE, 0x02); // Enable Endpoint 0-1 out interrupts
POLL_WRITE_BYTE(CMIE, 0x07); // Enable Reset, Resume, and Suspend
// interrupts
USB0XCN = 0xE0; // Enable transceiver; select full speed
POLL_WRITE_BYTE(CLKREC, 0x80); // Enable clock recovery, single-step
// mode disabled
EIE1 |= 0x02; // Enable USB0 Interrupts
EA = 1; // Global Interrupt enable
// Enable USB0 by clearing the USB
POLL_WRITE_BYTE(POWER, 0x01); // Inhibit Bit and enable suspend
// detection
}
//-----------------------------------------------------------------------------
// System_Init(void)
//-----------------------------------------------------------------------------
//
// Return Value - None
// Parameters - None
//
// This top-level initialization routine calls all support routine.
//
// ----------------------------------------------------------------------------
void System_Init(void)
{
Sysclk_Init();
Port_Init();
UART_Init();
}
//-----------------------------------------------------------------------------
// Sysclk_Init
//-----------------------------------------------------------------------------
//
// Return Value - None
// Parameters - None
//
// Initialize system clock to maximum frequency.
//
// ----------------------------------------------------------------------------
void Sysclk_Init(void)
{
OSCICN |= 0x83;
CLKMUL = 0x00;
CLKMUL |= 0x80; // Enable clock multiplier
Delay();
CLKMUL |= 0xC0; // Initialize the clock multiplier
while(!(CLKMUL & 0x20)); // Wait for multiplier to lock
CLKSEL = 0x00; // Use Clock Multiplier/2 as system clock
}
//-----------------------------------------------------------------------------
// Port_Init
//-----------------------------------------------------------------------------
//
// Return Value - None
// Parameters - None
//
// - Configure the Crossbar and GPIO ports.
//
// ----------------------------------------------------------------------------
void Port_Init(void)
{
P2MDOUT |= 0x0C; // enable LEDs as a push-pull outputs
}
//-----------------------------------------------------------------------------
// Uart_Init
//-----------------------------------------------------------------------------
//
// Return Value - None
// Parameters - None
//
// - Configure the Uart.
//
// ----------------------------------------------------------------------------
void UART_Init()
{
SCON0 = 0x10;
SBRLL0 = 0x8F;
SBRLH0 = 0xFD;
SBCON0 = 0x43;
IP = 0x10;
IE = 0x90;
}
//-----------------------------------------------------------------------------
// Delay
//-----------------------------------------------------------------------------
//
// Return Value - None
// Parameters - None
//
// Used for a small pause, approximately 80 us in Full Speed,
// and 1 ms when clock is configured for Low Speed
//
// ----------------------------------------------------------------------------
void Delay(void)
{
int x;
for(x = 0;x < 500;x)
x++;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -