demo_usb.c
来自「IAR-2148.rar 这是IAR上做的2148所有的例程」· C语言 代码 · 共 228 行
C
228 行
/*************************************************************************
*
* Used with ICCARM and AARM.
*
* (c) Copyright IAR Systems 2003
*
* File name : main.c
* Description : Define main module
*
* History :
* 1. Data : June 13, 2005
* Author : Stanimir Bonev
* Description : Create
*
* Buttons function
* Butt1 - Left movement of mouse marker
* Butt2 - Right movement of mouse marker
*
* $Revision: 1.2 $
**************************************************************************/
#include "includes.h"
/*************************************************************************
* Function Name: IRQSub
* Parameters: void
* Return: void
*
* Description: IRQ subroutine
*
*************************************************************************/
#pragma vector=0x18
__irq __arm void IRQ_ISR_Handler (void)
{
void (*interrupt_function)();
unsigned int vector;
vector = VICVectAddr; // Get interrupt vector.
interrupt_function = (void(*)())vector;
(*interrupt_function)(); // Call vectored interrupt function.
}
/*************************************************************************
* Function Name: IRQSub
* Parameters: void
* Return: void
*
* Description: FIQ subroutine
*
*************************************************************************/
#pragma vector=0x1c
__fiq __arm void FIQ_ISR_Handler (void)
{
void (*interrupt_function)();
unsigned int vector;
vector = VICVectAddr; // Get interrupt vector.
interrupt_function = (void(*)())vector;
(*interrupt_function)(); // Call vectored interrupt function.
}
/*************************************************************************
* Function Name: NonVectISR
* Parameters: void
* Return: void
*
* Description: non vectored callback subroutine
*
*************************************************************************/
void NonVectISR(void)
{
}
/*************************************************************************
* Function Name: ClearFlag
* Parameters: void
* Return: void
*
* Description: clear arg
*
*************************************************************************/
void ClearFlag (void* arg)
{
int * pFlag = (int *)arg;
*pFlag = 0;
}
/*************************************************************************
* Function Name: Dly100us
* Parameters: void *arg
* Return: void
*
* Description: Timer1 CH0 subroutine - delay [100us]
*
*************************************************************************/
void Dly100us(void *arg)
{
int Flag = 1;
int Delay = (int)arg;
// Stop Timer 1
TIMER_Stop(TIMER1);
// Stop Reset Timer 1 counter
TIMER_Reset(TIMER1);
// Set action of match module CH0
TIMER_SetMatchAction(TIMER1, CH0, TimerAction_Interrupt | TimerAction_StopTimer,
Delay usec_T1*100, ClearFlag, (void *)&Flag, DONOTHING);
// Start Timer 1
TIMER_Start(TIMER1);
// Wait expire of delay
while(Flag);
}
/*************************************************************************
* Function Name: SysInit
* Parameters: void
* Return: int
*
* Description: Hardware initialize
*
*************************************************************************/
int SysInit(void)
{
// Initialize the system
#ifdef FLASH
if (SYS_Init(FOSC, FCCLK, VPBDIV1, USER_FLASH, 0xB27E7FFF,0x80FFFFFF,0xFFFFFFFF,0))
return 1;
#else
if (SYS_Init(FOSC, FCCLK, VPBDIV1, USER_RAM, 0xB27E7FFF,0x80FFFFFF,0xFFFFFFFF,0))
return 1;
#endif
// Initialize Timer 0
if (TIMER_Init(TIMER0, TIMER_PRECISION))
return 1;
// initialize VIC
VIC_Init();
VIC_SetProtectionMode(UserandPrivilegedMode);
// Initialize USB
if (USB_Init(VIC_Slot0,HID_CallBack,USB_NotFast))
return 1;
// Timer0 interrupt
VIC_SetVectoredIRQ(TIMER0_ISR,VIC_Slot1,VIC_TIMER0);
VIC_EnableInt(1<<VIC_TIMER0);
// Timer1 interrupt
VIC_SetVectoredIRQ(TIMER1_ISR,VIC_Slot2,VIC_TIMER1);
VIC_EnableInt(1<<VIC_TIMER1);
// Enable interrupts non vectored interrupts
VIC_DisableNonVectoredIRQ();
return 0;
}
/*************************************************************************
* Function Name: UserStart
* Parameters: void
* Return: void
*
* Description: User demo subroutine
*
*************************************************************************/
unsigned int USB_Data;
void UserStart(void)
{
/* Buttons Init */
ButtonsInit();
/* System time init */
TIMER_SetMatchAction(TIMER0, CH0, TimerAction_Interrupt | TimerAction_ResetTimer,
1sec_T0/TICK_PER_SECOND, SetSysTickFlag, (void *)&TickSysFlag, DONOTHING);
TIMER_Start(TIMER0);
/* HID Init */
HID_Init();
}
/*************************************************************************
* Function Name: main
* Parameters: void
* Return: void
*
* Description: Main subroutine
*
*************************************************************************/
int main (void)
{
LPC_INT8U Temp;
signed char X = 0;
if(SysInit() == 0)
{
// Start user program
__enable_interrupt();
UserStart();
}
// Main loop
while(1)
{
if(TickSysFlag)
{
TickSysFlag = 0;
/* Buttons event */
Temp = GetButtonsEvent();
if (Temp)
{
/* Button1 event "Left" */
if (Temp&BUTT_EVENT_1)
{
X = -10;
}
/* Button2 event "Right" */
if (Temp&BUTT_EVENT_2)
{
X = 10;
}
if(HID_GetConfiguration())
{
HID_SendReport(0,X,0);
}
X = 0;
}
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?