/*
File Name : yc_it.h
Author : Yichip
Version : V1.0
Date : 2018/03/27
Description : Interrupt function encapsulation.
*/
#ifndef __YC_IT_H__
#define __YC_IT_H__
#include "..\core\yc3121.h"
#define EXECUTE_SUPPLIES_TIMES 3000 //1S钟执行一次
extern unsigned int SuppliesTimes;
/**
* @brief systick interrupt function
*/
extern void SYSTICK_IRQHandler(void);
/**
* @brief EXTI0 interrupt function
*
*/
void EXTI0_IRQHandler(void);
/**
* @brief EXTI1 interrupt function
*
*/
void EXTI1_IRQHandler(void);
/**
* @brief EXTI2 interrupt function
*
*/
void EXTI2_IRQHandler(void);
/**
* @brief iic interrupt function
*/
extern void IIC_IRQHandler(void);
/**
* @brief qspi interrupt function
*/
extern void QSPI_IRQHandler(void);
/**
* @brief spi0 interrupt function
*/
extern void SPI0_IRQHandler(void);
/**
* @brief spi1 interrupt function
*/
extern void SPI1_IRQHandler(void);
/**
* @brief uart0 interrupt function
*/
extern void UART0_IRQHandler(void);
/**
* @brief uart1 interrupt function
*/
extern void UART1_IRQHandler(void);
/**
* @brief DMA memory copy interrupt function
*/
extern void MEMCP_IRQHandler(void);
/**
* @brief rsa interrupt function
*/
extern void RSA_IRQHandler(void);
/**
* @brief sci0 interrupt function
*/
extern void SCI0_IRQHandler(void);
/**
* @brief sci1 interrupt function
*/
extern void SCI1_IRQHandler(void);
/**
* @brief kscan interrupt function
*/
extern void KSCAN_IRQHandler(void);
/**
* @brief timer0 interrupt function
*/
extern void TIMER0_IRQHandler(void);
/**
* @brief timer1 interrupt function
*/
extern void TIMER1_IRQHandler(void);
/**
* @brief timer2 interrupt function
*/
extern void TIMER2_IRQHandler(void);
/**
* @brief timer3 interrupt function
*/
extern void TIMER3_IRQHandler(void);
/**
* @brief timer4 interrupt function
*/
extern void TIMER4_IRQHandler(void);
/**
* @brief timer5 interrupt function
*/
extern void TIMER5_IRQHandler(void);
/**
* @brief sm1 interrupt function
*/
extern void SM1_IRQHandler(void);
/**
* @brief sm4 interrupt function
*/
extern void SM4_IRQHandler(void);
/**
* @brief sec interrupt function
*/
extern void SEC_IRQHandler(void);
/**
* @brief msr interrupt function
*/
extern void MSR_IRQHandler(void);
#endif /* __YC_IT_H__ */
/************************ (C) COPYRIGHT YICHIP *************************
* File Name : usb_main.c
* Author : YICHIP
* Version : V1.0.0
* Date : 21-May-2019
* Description : USB-OTG Core layer.
*****************************************************************************/
/* Includes ------------------------------------------------------------------*/
#include <string.h>
#include <stdio.h>
#include "usb_dcd_int.h"
#include "usbd_printer_core.h"
#include "usbd_usr.h"
#include "usbd_desc.h"
#include "misc.h"
#include "usbd_printer_vcp.h"
#include "yc_timer.h"
#include "usb_defines.h"
#include "usb_main.h"
USB_OTG_CORE_HANDLE USB_OTG_dev;
void usb_reg_init()
{
USB_OTG_WRITE_REG8(CORE_USB_CONFIG, 0x00);
my_delay_ms(1);
USB_OTG_WRITE_REG8(CORE_USB_TRIG, 0xc0);
USB_OTG_WRITE_REG8(CORE_USB_CONFIG, 0x3c);
USB_OTG_WRITE_REG8(CORE_USB_STATUS, 0xFF);
USB_OTG_WRITE_REG8(CORE_USB_FIFO_EMPTY, 0xFF);
USB_OTG_WRITE_REG8(CORE_USB_ADDR, 0x00);
USB_OTG_WRITE_REG8(CORE_USB_INT_MASK(0), 0x70);
USB_OTG_WRITE_REG8(CORE_USB_INT_MASK(1), 0xf0);
USB_OTG_WRITE_REG8(CORE_USB_INT_MASK(2), 0xff);
}
void usb_main(void)
{
enable_clock(CLKCLS_BT);
BT_CLKPLL_EN = 0xff;
enable_clock(CLKCLS_USB);
SYSCTRL_HCLK_CON |= 1 << 11;
usb_reg_init();
enable_intr(INTR_USB);
memset(&USB_OTG_dev, 0, sizeof(USB_OTG_dev));
USBD_Init(&USB_OTG_dev,
#ifdef USE_USB_OTG_HS
USB_OTG_HS_CORE_ID,
#else
USB_OTG_FS_CORE_ID,
#endif
&USR_desc,
&USBD_PRINTER_cb,
&USRD_cb);
}
//在USB中断服务函数中调用
void USB_Interrupt_Service(void)
{
USBD_OTG_ISR_Handler(&USB_OTG_dev); //USB状态读取和设置
}
//USB数据发送
void USB_Printer_Send(uint8_t *datas,uint16_t len)
{
uint16_t i = 0;
uint8_t temp_buf[PRINTER_DATA_MAX_PACKET_SIZE];
uint8_t temp_len = 0;
//小于64 不拆包 大于64 拆包发送,用于测试
if (len <= PRINTER_DATA_MAX_PACKET_SIZE)
{
DCD_EP_Tx(&USB_OTG_dev, PRINTER_IN_EP, datas, len);
delay_ms(10);
//while(0 == g_send_finish_flag);
//g_send_finish_flag = 0;
}
else if(len > PRINTER_DATA_MAX_PACKET_SIZE)
{
//整64字节发完 发下面的
for(i = 0; i < (len/PRINTER_DATA_MAX_PACKET_SIZE); i++)
{
memcpy(temp_buf, &datas[i * PRINTER_DATA_MAX_PACKET_SIZE], PRINTER_DATA_MAX_PACKET_SIZE);
DCD_EP_Tx(&USB_OTG_dev, PRINTER_IN_EP, temp_buf, PRINTER_DATA_MAX_PACKET_SIZE);
delay_ms(10);
//while(0 == g_send_finish_flag);
//g_send_finish_flag = 0;
}
//发剩下的字节 (最后一包)
if((len % PRINTER_DATA_MAX_PACKET_SIZE) != 0)
{
temp_len = len % PRINTER_DATA_MAX_PACKET_SIZE;
memcpy(temp_buf, &datas[len - temp_len], temp_len);
DCD_EP_Tx(&USB_OTG_dev, PRINTER_IN_EP, temp_buf, temp_len);
delay_ms(10);
//while(0 == g_send_finish_flag);
//g_send_finish_flag = 0;
}
}
}
/************************ (C) COPYRIGHT Yichip Microelectronics *****END OF FILE****/
U20-差异文件
最新推荐文章于 2025-05-07 08:54:29 发布