📄 ad4360.c
字号:
#include "def4360.h"
#include "lthal.h"
#include "l4360ci.h"
//#include "ctype.h"
//#include "ltprotodma.h"
// STC89C516RD@22.1184MHz 64KB Flash 256B(DataRAM)+1024B(Ext.RAM)
// 24MHz,33MHz
// UART+SPI
// P1.0 ADF4360:CLK
// P1.1 ADF4360:DATA
// P1.2 ADF4360:PGM,Latch
// P1.3 IC-CARD:RST
// P1.4 IC-CARD:FUS
// P1.5 IC-CARD:PWR
// P1.6 IC-CARD:CheckIn
// P1.7 NC
// P3.0 USB芯片PDIUSBD12:CS(RXD)
// P3.1 USB芯片PDIUSBD12:SA0(TXD)
// P3.2 USB芯片PDIUSBD12:INT(INT0)
// P3.3 RUNLED(INT1)
// P3.4 USB芯片PDIUSBD12:RST(T0)
// P3.5 USB芯片PDIUSBD12:SUSPEND(T1)
// P3.6 SWR
// P3.7 SRD
//=====================================
// Error No.
// 0x30 : Ok
bit CommandFlag ;
bit MainRxDone ;
bit MainTxDone ;
bit MainRxFlag ;
bit CurrentFlag ;
bit RecivedHead ;
#define DataHead 0xa5
#define StartTest 0x00
#define StopTest 0x01
#define Fosc 22118400
#define BAUDRATE 19200
sfr AUXR_89C516 = 0x8e ;
sfr WDT_CONTR = 0xe1 ;
unsigned char code MyDateStr[] = __DATE2__ ;
unsigned char code MyTimeStr[] = __TIME__ ;
#define SoftWareVer 0x0100
unsigned char idata MainTxLength ;
//unsigned char idata MainTxIndex ;
unsigned char xdata coma_count_rxd , coma_count_txd , coma_max_count_txd ;
unsigned char xdata RxdHead , RxdEnd ;
unsigned char xdata coma_rxd_buff [ 128 ] ; // 循环队列
unsigned char xdata coma_txd_buff [ 10 ] ;
unsigned char xdata CurResult [10] ;
unsigned char xdata CurIndex ;
unsigned int data m1 ;
extern unsigned char idata TimerForICcard ;
unsigned int idata counter ;
unsigned char data freqno ;
// USB standard device requests
// USB 标准设备请求入口地址表
void get_status(void);
void clear_feature(void);
void set_feature(void);
void set_address(void);
void get_descriptor(void);
void get_configuration(void);
void set_configuration(void);
void get_interface(void);
void set_interface(void);
void reserved(void);
// DMA
void read_write_register(void);
extern void _nop_ ( void ) ;
extern void OutFreq ( unsigned char FreqNo ) ;
unsigned char code InvalidCmd [16]= { "Invalid Command!" } ;
unsigned char code ErrorCheck [16]= { "Error Of Check !" } ;
unsigned char idata mi ;
// 卡上存储的ID格式:3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,1,2
// 即高两位被存放在20个字符数组中的最后两个单元,方便与以前的便携程序兼容
// 函数指针数组,标准设备请求
code void (*StandardDeviceRequest[])(void) =
{
get_status, // 获取D12状态
clear_feature, // 清除特性
reserved, // 保留
set_feature, // 设置特性
reserved, // 保留
set_address, // 设置地址
get_descriptor, // 获取描述符
reserved, // 保留
get_configuration, // 获取配置
set_configuration, // 设置配置
get_interface, // 获取接口信息
set_interface, // 设置接口
reserved, // 保留
reserved, // 保留
reserved, // 保留
reserved // 保留
};
// 用户厂商请求程序入口地址表
code void (*VendorDeviceRequest[])(void) =
{
reserved, // 保留
reserved, // 保留
reserved, // 保留
reserved, // 保留
reserved, // 保留
reserved, // 保留
reserved, // 保留
reserved, // 保留
reserved, // 保留
reserved, // 保留
reserved, // 保留
reserved, // 保留
read_write_register, // 厂商请求处理
reserved, // 保留
reserved, // 保留
reserved // 保留
};
// 公共静态数据
//extern EPPFLAGS bEPPflags;
//extern bit bEPPflags_timer ;
extern bit bEPPflags_in_isr ;
extern bit bEPPflags_ep1_rxdone ;
extern bit bEPPflags_bus_reset ;
extern bit bEPPflags_suspend ;
extern bit bEPPflags_setup_packet ;
extern bit bEPPflags_remote_wakeup ;
extern bit bEPPflags_configuration ;
extern bit bEPPflags_verbose ;
extern bit bEPPflags_power_down ;
extern unsigned char idata bEPPflags_control_state ;
extern unsigned char idata bEPPflags_setup_dma ;
extern unsigned char idata bEPPflags_dma_state ;
//extern unsigned long ClockTicks;
extern unsigned char idata GenEpBuf[];
extern unsigned char idata GenEpBufToHost[];
extern IO_REQUEST idata ioRequest;
extern unsigned char ioSize, ioCount;
extern unsigned char xdata MainEpBuf[];
extern unsigned char idata EpBuf[];
CONTROL_XFER ControlData;
unsigned char bNoRAM;
//==================================================
// PCON: SMOD | - | - | - | GF1|GF0|PD |IDL|
// TCON: TF1 | - |TF0| - |IE1 |IT1|IE0|IT0|
// Configure Timer 0
// - Mode = 1
// - Interrupt = ENABLED
// - Clock Source = INTERNAL
// - Enable Gating Control = DISABLED
void init_timer0(void)
{
TMOD &= 0xF0 ; // clear Timer 0
TMOD |= 0x01 ;
TL0 = 0xee; // value set by user 2.5 ms@22.1184MHz
TH0 = 0x00; // value set by user
ET0 = 1; // IE.1
TR0 = 1; // TCON.4 start timer
PT0 = 1;
}
void uart_int ( void ) interrupt 4
{
if ( RI )
{
coma_rxd_buff [ RxdHead ++ ] = SBUF ;
RxdHead &= 0x7f ;
RI = 0 ;
}
if ( TI )
{
TI = 0 ;
if ( coma_count_txd < coma_max_count_txd )
SBUF = coma_txd_buff [ coma_count_txd ++ ] ;
else
{
coma_count_txd = 0x00 ;
coma_max_count_txd = 0x00 ;
}
}
}
void init_port()
{
P0 = 0xFF;
P1 = 0x00 ; // 0xFF safe for IcCard ;
P2 = 0xFF;
P3 = 0xF7;
MCU_D12CS = False ; //D12 Select
D12SUSPD = False ; //D12 not in Suspend
}
//Serial Port
//Mode = 1 /8-bit UART
//Serial Port Interrupt = Disabled
//Receive = Enabled
//Auto Addressing = Disabled
void init_serial(void) // SST89E564
{
SCON = 0x50; // SCON: SM0|SM1|SM2|REN| TB8|RB8| TI|RI
PCON = 0x80; // PCON: SMOD | - | - | - | GF1|GF0| PD|IDL|
TMOD = 0x20; // TMOD: GATE |C/T| M1| M0|GATE|C/T| M1|M0
TCON = 0x69; // TCON: TF1|TR1|TF0|TR0| IE1|IT1|IE0|IT0
// TH1 = 0xf3; // TH1=0xF3:
TH1 = - ( Fosc / 12 / 16 / BAUDRATE ) ;
TR1 = True ;
ES = True ;
}
//=================================================================
void disconnect_USB(void) // 断开USB连接
{
D12_SetMode(D12_NOLAZYCLOCK|D12_CLOCKRUNNING, D12_SETTOONE | D12_CLOCK_12M);
// D12_SetMode( 0x00 , 0x00 ) ; //教科书
}
void connect_USB(void) // 连接USB
{
DISABLE; // 关中断
// bEPPflags.value = 0; // reset event flags
// bEPPflags_timer = 0 ;
bEPPflags_bus_reset = 0 ;
bEPPflags_suspend = 0 ;
bEPPflags_setup_packet = 0 ;
bEPPflags_remote_wakeup = 0 ;
bEPPflags_in_isr = 0 ;
bEPPflags_configuration = 0 ;
bEPPflags_verbose = 0 ;
bEPPflags_ep1_rxdone = 0 ;
bEPPflags_power_down = 0 ;
bEPPflags_control_state = 0 ;
bEPPflags_setup_dma = 0 ;
bEPPflags_dma_state = 0 ;
ENABLE; // 开中断
D12_SetEndpointStatus(4, 0);// 设置端点状态 l8624ci.c
D12_SetEndpointStatus(5, 0);// 设置端点状态 l8624ci.c
// V2.1 enable normal+sof interrupt
D12_SetDMA(D12_ENDP4INTENABLE | D12_ENDP5INTENABLE); // l8624ci.c
// Initialize D12 configuration
D12_SetMode(D12_NOLAZYCLOCK |D12_CLOCKRUNNING|D12_SOFTCONNECT,D12_SETTOONE | D12_CLOCK_12M );
// l8624ci.c
}
void reconnect_USB(void) // 重新连接USB
{
// unsigned long clk_cnt;
// RunLed = 1;
// Pull-down D12's SUSPEND pin
// Disable 74HCT123 pulse generation before disconnect
// Release D12's SUSPEND pin after receiving bus reset from host
D12SUSPD = 0;
disconnect_USB();
ENABLE;
//printf("Wait for 1 second ...\n");
// clk_cnt = ClockTicks;
// while(ClockTicks < clk_cnt + 20) _nop_ ( ) ; // 延时
TimerForICcard = 0x00 ;
while(TimerForICcard < 200 ) _nop_ ( ) ; // 延时
TimerForICcard = 0x00 ;
while(TimerForICcard < 200 ) _nop_ ( ) ; // 延时
DISABLE;
connect_USB(); // 连接USB
// RunLed = 1;
}
//------------------------------
void stall_ep0(void)
{
D12_SetEndpointStatus(0, 1);
D12_SetEndpointStatus(1, 1);
}
//------------------------------
// 进入地址状态,禁止0除外的所有端点
void init_unconfig(void)
{
D12_SetEndpointEnable(0) ;
}
// 配置处理,允许端点收发
void init_config(void)
{
D12_SetEndpointEnable(1) ;
}
// 通过端点索引1发送数据(DATA类型)
void single_transmit(unsigned char * buf, unsigned char len)
{
if( len <= EP0_PACKET_SIZE)
{
D12_WriteEndpoint(1, len, buf);
}
}
// 通过端点索引1发送数据(CODE类型)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -