一、XAAR喷头简介
XS128喷墨打印头
Light and powerful: with a compact footprint and light carriage weight of only 16 grams, the agile Xaar 128 printhead is ideal for applications where weight and size are a key factor to design.
Ease of integration: specifically engineered with a simple electronic interface, the Xaar 128 promotes quick and easy integration into printers making it the ideal choice for those wanting to enter into a variety of markets.
二、硬件原理图设计
三、墨水系统
.
四、固件驱动程序
关于XAAR喷头部分的驱动程序采用模块化设计,ARM程序部分加入XAAR.h之后,完成硬件相关接口的配置即可。
XAAR.h
#ifndef __XAAR_H_ #define __XAAR_H_ #include <TKIT_Header\TKIT.h> #include "XAAR_cfg.h" #define XAAR_ERR INT8U //错误码定义 #define ERR_XAAR_SUCCESS 0 //正常 #define ERR_XAAR_SPEED 1 //喷头速度不匹配 #define ERR_XAAR_NOZZLE 2 //喷嘴数量不匹配 #define ERR_XAAR_TEMPER 3 //喷头温度报警 #define ERR_XAAR_TRIG 4 //喷墨触发信号超时 #define ERR_XAAR_READY 5 //喷头空闲信号超时 #define ERR_XAAR_BMP 6 //图片格式错误 /* Layer specfication --------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------- -- -- XAAR 喷墨头控制应用层功能函数 -- 调用硬件配置接口 XAAR_cfg.h的函数 -- -- 建议 -- 或者确保XAAR电源信号上电处于关闭状态 -- XAAR_init(); BMP_Readfile(&bmp,NULL,NULL); //Read print file XAAR_PowerProcess( TRUE ); //Power up TKIT_DlyTicks(TKIT_DLY_100MS); result = XAAR_PrintBmp(speed,&bmp,NULL,TEST); XAAR_PowerProcess( FALSE ); //Power down ------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------*/ //XAAR 初始化流程 //上电之后调用一次,所有需要初始化的在此函数 void XAAR_init (void); //XAAR terminal 控制台 void TerminalHandler_XAAR (INT8U * para); /* Layer specfication --------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------- -- -- XAAR 喷墨头控制逻辑层 -- -- ------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------*/ extern INT32U XAAR_LoadCount; //载入数据的次数 extern INT32U XAAR_Percent; //喷墨浓度百分比 //Fire clock 调用的函数 void XAAR_FireIsr (void); //启动fire void XAAR_FireStartStop (BOOLEAN en); //设置load数据地址 void XAAR_LoadAddrSet (INT8U* addr); //Load data. Ready ISR //Ready 中断调用 //优先级设置最高 void XAAR_LoadIsr (void); //强制快速关闭XAAR所有电源 void XAAR_PowerForceOff (void); //XAAR 上电或断电流程 void XAAR_PowerProcess (BOOLEAN on_off); /* Layer specfication --------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------- -- -- XAAR 喷墨头控制应用层 -- 阻塞执行 -- ------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------*/ //配置打印参数 //Percent :出墨浓度 0--100 XAAR_ERR XAAR_PrintArg (INT8U Percent); //暂不支持灰度打印,可尝试灰度处理 //打印BMP位图 //p_bmp : bmp 位图 //speed : 模拟打印速度 mm/s //trig : 每一行的触发消息,如果不需要可输入NULL // //speed / trig,选择其一使用,例如通过码盘或者中断时间触发可使用trig消息进行触发每一行打印 // TKIT_MsgPost(trig, 0 );//打印一行 // TKIT_MsgPost(trig, 0 );//打印一行 // 由于此函数阻塞运行,触发信号应该在中断里发出 XAAR_ERR XAAR_PrintBmp (INT32U speed,TKIT_EVENT *trig,BMP * p_bmp); //打印数据区域 XAAR_ERR XAAR_PrintBuffer (INT32U speed,TKIT_EVENT *trig,INT8U * buf,INT32U width,INT32U heigh); //打印测试 XAAR_ERR XAAR_PrintTest (INT32U speed,TKIT_EVENT *trig,BOOLEAN black,INT32U heigh); /* Layer specfication --------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------- -- -- -- ------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------*/ #endif //__XAAR_H_
XAAR_CFG.C硬件接口配置
/* Layer specfication ------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------- -- -- This layer for initialization -- ----------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------*/ #include "XAAR_cfg.h" #include "includes.h" //Ready isr void EXTI15_10_IRQHandler(void) { EXTI_ClearITPendingBit(EXTI_Line12); XAAR_LoadIsr(); } //点火频率控制函数 void TIM2_IRQHandler(void) { TIM_ClearITPendingBit(TIM2, TIM_IT_Update); XAAR_FireIsr(); } //XAAR 点火频率控制 //单位Hz void XAAR_FireClk(INT32U clk) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); //TIM_InternalClockConfig(TIM2); //TIM_TimeBaseStructure.TIM_Period = SystemCoreClock/clk-1; // 72M TIM_TimeBaseStructure.TIM_Prescaler = 0; //Prescaler TIM_TimeBaseStructure.TIM_Period = SystemCoreClock/clk-1; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); TIM_ARRPreloadConfig(TIM2, ENABLE); TIM_Cmd(TIM2, ENABLE); TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//Interrupt enable } //XAAR硬件端口初始化 //clk : 128模块输入 1MHz //sck : SPI sck void XAARCFG_PortInit (INT32U clk,INT32U sck) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; ///////////////////// OUTPUT ///////////////////////////////// ///////////////////// OUTPUT ///////////////////////////////// ///////////////////// OUTPUT ///////////////////////////////// //Power 35V clk GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_ResetBits(GPIOB,GPIO_Pin_10); TKIT_IO_Cfg(GPIO_OUT_PTPOWER,GPIO_Pin_10,&GPIOB->MODER,&GPIOB->ODR,&GPIOB->ODR,&GPIOB->IDR); TKIT_IO_Set(GPIO_OUT_PTPOWER,IO_MODEPWM,IO_DIR_OUT,0,TKIT_DLY_100MS,0,2,1); //Power 35V clear GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_ResetBits(GPIOB,GPIO_Pin_11); //XAAR nReset ///////////////////////////// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC,&GPIO_InitStructure); GPIO_ResetBits(GPIOC,GPIO_Pin_6);//GPIO_ResetBits //GPIO_SetBits //XAAR VPPH ///////////////////////////// //XAAR VDD ///////////////////////////// //XAAR Phase ///////////////////////////// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC,&GPIO_InitStructure); GPIO_ResetBits(GPIOC,GPIO_Pin_7);//GPIO_ResetBits //GPIO_SetBits //XAAR nFIRE ///////////////////////////// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOF,&GPIO_InitStructure); GPIO_SetBits(GPIOF,GPIO_Pin_4);//GPIO_ResetBits //GPIO_SetBits //XAAR nSS1 ///////////////////////////// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_SetBits(GPIOB,GPIO_Pin_12);//GPIO_ResetBits //GPIO_SetBits //XAAR nSS2 ///////////////////////////// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC,&GPIO_InitStructure); GPIO_SetBits(GPIOC,GPIO_Pin_9);//GPIO_ResetBits //GPIO_SetBits ///////////////////// INPUT ////////////////////////////////// ///////////////////// INPUT ////////////////////////////////// ///////////////////// INPUT ////////////////////////////////// //XAAR Ready ///////////////////////////// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC,&GPIO_InitStructure); //Ready interrupt EXTI_ClearITPendingBit(EXTI_Line12); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC,EXTI_PinSource12); EXTI_InitStructure.EXTI_Line = EXTI_Line12; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); //XAAR Error ///////////////////////////// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD,&GPIO_InitStructure); TKIT_IO_Cfg(GPIO_IN_PTERROR,GPIO_Pin_2,&GPIOD->MODER,&GPIOD->ODR,&GPIOD->ODR,&GPIOD->IDR); TKIT_IO_Set(GPIO_IN_PTERROR,IO_MODEGPIO,IO_DIR_IN,0,TKIT_DLY_100MS,0,TKIT_DLY_2S,TKIT_DLY_1S); ///////////////////// ADVANCE //////////////////////////////// ///////////////////// ADVANCE //////////////////////////////// ///////////////////// ADVANCE //////////////////////////////// PrintfDebug("<XAAR_cfg>System clock=%d,XAAR clk=%d\r\n",SystemCoreClock,clk); //XAAR clock //////////////////////////////PC8 GPIO_PinAFConfig(GPIOC,GPIO_PinSource8,GPIO_AF_2);//PC8 TIM3-CH3 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC,&GPIO_InitStructure); TIM_TimeBaseStructure.TIM_Prescaler = 0;//SystemCoreClock/4000000-1; //64M - > 4M TIM_TimeBaseStructure.TIM_Period = SystemCoreClock/clk-1; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_Pulse = TIM_TimeBaseStructure.TIM_Period/2; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //Init TIM TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //TIM3 - CH2 //TIM_ClearFlag(TIM3,TIM_FLAG_CC2); //TIM_OC2Init(TIM3,&TIM_OCInitStructure); //TIM3 - CH3 TIM_ClearFlag(TIM3,TIM_FLAG_CC3); TIM_OC3Init(TIM3,&TIM_OCInitStructure); TIM_ARRPreloadConfig(TIM3, ENABLE); TIM_Cmd(TIM3, ENABLE); /* //定时器中断功能 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOF,&GPIO_InitStructure); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); //TIM_InternalClockConfig(TIM3); //TIM_TimeBaseStructure.TIM_Period = SystemCoreClock/clk-1; // 72M TIM_TimeBaseStructure.TIM_Prescaler = 18000-1; //Prescaler 72->4Mhz TIM_TimeBaseStructure.TIM_Period = 40-1; //4M -> 1M TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); TIM_ARRPreloadConfig(TIM3, ENABLE); TIM_Cmd(TIM3, ENABLE); TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//Interrupt enable */ //XAAR SPI Port ////////////////////// GPIO_PinAFConfig(GPIOB,GPIO_PinSource13,GPIO_AF_5);//SCK GPIO_PinAFConfig(GPIOB,GPIO_PinSource14,GPIO_AF_5);//MISO GPIO_PinAFConfig(GPIOB,GPIO_PinSource15,GPIO_AF_5);//MOSI // Configure SPI2 pins: SCK, MISO and MOSI //GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15); GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_13 | GPIO_Pin_15); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP ;//GPIO_OType_OD GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = ( GPIO_Pin_14 ); GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_Init(GPIOB, &GPIO_InitStructure); // SPI2 configuration SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //2M SPI_BaudRatePrescaler_16 //1M SPI_BaudRatePrescaler_32 SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16; //SPI_BaudRatePrescaler_16;//64/32 / 2M //SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8; //SPI_BaudRatePrescaler_16;//64/32 / 2M SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPI2, &SPI_InitStructure); SPI2->CR2 |= SPI_CR2_FRXTH ; //由于接收8bit数据,设定阀值为8-bit SPI_Cmd(SPI2, ENABLE); } /********************************************************************************************************** * * * Description: 电源和复位信号控制 * * Arguments : * * Returns : **********************************************************************************************************/ //35V电源控制 //压控电压是否输出控制 void XAARCFG_PowerVPPH (BOOLEAN on_off) { if( on_off ){ GPIO_SetBits( GPIOB,GPIO_Pin_11); } else { GPIO_ResetBits(GPIOB,GPIO_Pin_11); } } //5V逻辑电压控制 void XAARCFG_PowerVDD (BOOLEAN on_off) { //if( on_off ){ GPIO_SetBits( GPIOB,GPIO_Pin_2); } //else { GPIO_ResetBits(GPIOB,GPIO_Pin_2); } } //XAAR Reset 电平输出 //IO_LEV_HIGH //IO_LEV_LOW void XAARCFG_nResetPort (BOOLEAN L_H) { if( L_H ){ GPIO_SetBits( GPIOC,GPIO_Pin_6); } else { GPIO_ResetBits(GPIOC,GPIO_Pin_6); } } /********************************************************************************************************** * * * Description: 数据以及控制信号 * * Arguments : * * Returns : **********************************************************************************************************/ //Active low error output signal that indicates high ink temperature. //温度报警信号 //Therefore nFAULT should only be sampled while READY is high. BOOLEAN XAARCFG_nTempError (void) { if( XAARCFG_Ready() ) { return GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_2); } return HIGH; } //打印数据准备完毕 BOOLEAN XAARCFG_Ready (void) { return GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_12); } //打印Phase选择 void XAARCFG_Phase (BOOLEAN L_H) { if( L_H ){ GPIO_SetBits( GPIOC,GPIO_Pin_7); } else { GPIO_ResetBits(GPIOC,GPIO_Pin_7); } } //启动喷墨触发信号 //The nFIRE is sampled while READY is active (high level). void XAARCFG_nFIRE (BOOLEAN L_H) { if( L_H ){ GPIO_SetBits( GPIOF,GPIO_Pin_4); } else { GPIO_ResetBits(GPIOF,GPIO_Pin_4); } } //MOSI通信片选信号 //chip-1 / chip-2 void XAARCFG_nSS1 (BOOLEAN L_H) { if( L_H ){ GPIO_SetBits( GPIOB,GPIO_Pin_12); } else { GPIO_ResetBits(GPIOB,GPIO_Pin_12); } } void XAARCFG_nSS2 (BOOLEAN L_H) { if( L_H ){ GPIO_SetBits( GPIOC,GPIO_Pin_9); } else { GPIO_ResetBits(GPIOC,GPIO_Pin_9); } } //发送一个字节的打印数据到当前行 //dir 1: 低位先发 推荐 //dir 0: 高位先发 BOOLEAN XAARCFG_SendData (INT8U byte,BOOLEAN dir) { INT8U bit,u8; INT32U TimeOut=0; if( dir ){ SPI_SendData8(SPI2,byte); } else{ u8 = byte; byte = 0; for(bit=0;bit<8;bit++){ if( u8&(1<<bit) )byte|=(1<<(7-bit)); } SPI_SendData8(SPI2,byte); } //等待发送结束 while( SPI_TransmissionFIFOStatus_Empty!=SPI_GetTransmissionFIFOStatus(SPI2) ) { TimeOut++; if( TimeOut>=99999 ) return FALSE; } return TRUE; }
XAAR_Terminal.c终端测试接口
#include "XAAR.h" /* ** XAAR control */ void TerminalHandler_XAAR(INT8U * para) { #if 1 char *endp; INT8U u8; INT32U u32; INT32U u32_speed; INT32U u32_addr; char Buf[1024*7],Arg[64]; BMP bmp; Terminal_UserNameModify(" xaar"); Printf(" ====== XAAR Printer Terminal platform ======\r\n"); Printf(" Command: \r\n"); Printf(" 'fire\' nFire port control[1,0]\r\n"); Printf(" 'SS1\' nSS1 port control[1,0]\r\n"); Printf(" 'SS2\' nSS2 port control[1,0]\r\n"); Printf(" 'rst\' nReset port control[1,0]\r\n"); Printf(" 'phase\' Phase port control[1,0]\r\n"); Printf(" 'clk\' Clock control[clk,spi sck]\r\n"); Printf(" '35v\' 35v Printer power control[1,on]\r\n"); Printf(" --------------------------------------------\r\n"); Printf(" 'power\' Power control. VDD->VPPH->nReset.[1:On, 0:Off]\r\n"); Printf(" 'send\' Send data shift[data,send-count]\r\n"); Printf(" 'bmp\' Print bmp test[bmp address,speed:mm/s ]\r\n"); Printf(" Please input command:\r\n"); TKIT_DlyTicks(TKIT_DLY_100MS); while(1) { //读取命令 std_MemSet( (INT8U*)Arg,0x00,sizeof(Arg)/sizeof(Arg[0]) ); GetsExt((INT8U*)Buf,(INT8U*)Arg); //退出测试平台命令 if(0 == std_StringCmpExt("exit%EXIT",Buf))break; //35V if(0 == std_StringCmpExt("35v%35V",Buf)) { u8 = std_StringToulExt((char*)Arg,&endp,0,' ');XAARCFG_PowerVPPH(u8); Printf(" >>Set 35V:%d[On if >=1]\r\n",u8); } //fire 控制 if(0 == std_StringCmpExt("fire%FIRE",Buf)) { u8 = std_StringToulExt((char*)Arg,&endp,0,' ');XAARCFG_nFIRE(u8); Printf(" >>Set XAAR nFire:%d[On if >=1]\r\n",u8); } //SS1/SS2 control if(0 == std_StringCmpExt("ss1%SS1",Buf)) { u8 = std_StringToulExt((char*)Arg,&endp,0,' ');XAARCFG_nSS1(u8); Printf(" >>Set nSS1:%d[On if >=1]\r\n",u8); } if(0 == std_StringCmpExt("ss2%SS2",Buf)) { u8 = std_StringToulExt((char*)Arg,&endp,0,' ');XAARCFG_nSS2(u8); Printf(" >>Set nSS2:%d[On if >=1]\r\n",u8); } if(0 == std_StringCmpExt("rst%RST",Buf)) { u8 = std_StringToulExt((char*)Arg,&endp,0,' ');XAARCFG_nResetPort(u8); Printf(" >>Set nReset:%d[On if >=1]\r\n",u8); } if(0 == std_StringCmpExt("phase%PHASE",Buf)) { u8 = std_StringToulExt((char*)Arg,&endp,0,' ');XAARCFG_Phase(u8); Printf(" >>Set Phase:%d[On if >=1]\r\n",u8); } if(0 == std_StringCmpExt("clk%CLK",Buf)) { u32 = std_StringToulExt((char*)Arg,&endp,0,' '); u32_speed = std_StringToulExt(endp+1,&endp,0,' '); XAARCFG_PortInit(u32,u32_speed); Printf(" >>Set Clk:%d, SPI clk:%d\r\n",u32,u32_speed); } //上电或断电流程 if(0 == std_StringCmpExt("power%POWER",Buf)) { u8 = std_StringToulExt((char*)Arg,&endp,0,' '); XAAR_PowerProcess(u8); Printf(" >>Start XAAR power process:%d[On if >=1]\r\n",u8); } //输出打印数据 if(0 == std_StringCmpExt("send%SEND",Buf)) { u8 = std_StringToulExt((char*)Arg,&endp,0,' '); u32 = std_StringToulExt(endp+1,&endp,0,' '); if(0==u32)u32=1; Printf(" >>Send data:0x%02x to printer. Send count=%d ... ",u8,u32); TKIT_TimerValCreate(&u32_speed); while(u32--) { XAARCFG_SendData(u8,1); } Printf(" Time=%dms,Done!\r\n", TKIT_TICKS2MS(u32_speed) ); TKIT_TimerValDelete(&u32_speed); } //打印一个bmp位图测试 if(0 == std_StringCmpExt("bmp%BMP",Buf)) { u32_addr = std_StringToulExt((char*)Arg,&endp,0,' '); u32_speed = std_StringToulExt(endp+1,&endp,0,' '); bmp.SetBuf = (INT8U*)Buf; bmp.SetBufLen = sizeof(Buf); Printf(" BMP Addr=0x%08x,Speed=%dmm/s,BufferLen=%d \r\n",u32_addr,u32_speed,bmp.SetBufLen ); TKIT_TimerValCreate(&u32); if( TRUE==BMP_Readfile(&bmp,u32_addr,NULL,NULL) ) { Printf(" Read bmp success.time=%dms \r\n", TKIT_TICKS2MS(u32) ); } else { Printf(" Read bmp error . time=%dms \r\n", TKIT_TICKS2MS(u32) ); } //上电 TKIT_TimerValClear(&u32); XAAR_PowerProcess( TRUE ); Printf(" Power On process.time=%dms \r\n", TKIT_TICKS2MS(u32) ); TKIT_TimerValClear(&u32); if( XAAR_PrintBmp(u32_speed,NULL,&bmp) ) { Printf(" Print bmp success.time=%dms \r\n", TKIT_TICKS2MS(u32) ); } else { Printf(" Print bmp error.time=%dms \r\n", TKIT_TICKS2MS(u32) ); } //断电 TKIT_TimerValClear(&u32); XAAR_PowerProcess( FALSE ); Printf(" Power Off process.time=%dms \r\n", TKIT_TICKS2MS(u32) ); TKIT_TimerValDelete(&u32); } /////end while } Printf(" >>XAAR control finished.\r\n"); Terminal_UserNameModify(NULL); #else Printf(" >>XAAR control disable\r\n"); #endif }