📄 parallel.c
字号:
/****************************************************************************/
/* */
/* FILE NAME VERSION */
/* */
/* PARALLEL.C 1.0 */
/* */
/* DESCRIPTION */
/* */
/* JX44B0(S3C44B0X)标准并口打印机驱动实验 */
/* */
/* */
/* DATA STRUCTURES */
/* */
/* FUNCTIONS : */
/* 在JX44B0教学实验箱进行标准并口打印机驱动的实验 */
/* */
/* DEPENDENCIES */
/* JX44B0-1 */
/* JX44B0-2 */
/* JX44B0-3 */
/* */
/* */
/* NAME: */
/* REMARKS: */
/* */
/* Copyright (C) 2003 Wuhan CVTECH CO.,LTD */
/****************************************************************************/
/****************************************************************************/
/* 学习JX44B0中标准并口打印机驱动函数的编写方法: */
/* 注意: */
/* 1. 程序运行前请正确接入并口打印机,并通电,具体连接请阅读用户手册 */
/* 2. 请不要带电拔插并口 */
/* 3. 请在开始实验后往打印机中加入打印纸 */
/****************************************************************************/
/* 包含文件 */
#include "44b.h"
#include "44blib.h"
#include "rtc.h"
#define LP_ADDR_CONTROL 0x0a000000
#define LP_ADDR_STATUS 0x0a000000
#define LP_ADDR_DATA 0x0a000002
#define LP_nERROR (1 << 3)
#define LP_SELECT (1 << 4)
#define LP_PE (1 << 5)
#define LP_BUSY (1 << 6)
#define LP_nACK (1 << 7)
#define LP_nSTROBE (1 << 0)
#define LP_AUTOFEED (1 << 1)
#define LP_nINIT (1 << 2)
#define LP_nSELECT_IN (1 << 3)
void printchar(unsigned char);
int lp_ctrl_value = LP_nSTROBE | LP_AUTOFEED | LP_nINIT;
/********************************************************************
// Function name : Main
// Description : 并口打印机驱动实验主函数
// Return type : void
// Argument :
*********************************************************************/
void Main()
{
unsigned char status;
char test_data[]= "0123456789\n\n0123456789\n";
char *p_test_data;
p_test_data = test_data;
Uart_Printf("Parallel Printer Test!\n");
/* 初始化 */
*(unsigned char *)LP_ADDR_CONTROL = lp_ctrl_value;
/* 打印字符串 */
while(*p_test_data!=0)
{
// wait for no busy.
while( *((unsigned char *)LP_ADDR_STATUS) & LP_BUSY)
Uart_Printf("status = 0x%x\n", *((unsigned char *)LP_ADDR_STATUS));
// send data
Uart_Printf("%c", *p_test_data);
*(unsigned char *)LP_ADDR_DATA = *p_test_data++;
// send strobe
lp_ctrl_value |= LP_nSTROBE;
*(unsigned char *)LP_ADDR_CONTROL = lp_ctrl_value;
lp_ctrl_value &= ~LP_nSTROBE;
*(unsigned char *)LP_ADDR_CONTROL = lp_ctrl_value;
lp_ctrl_value |= LP_nSTROBE;
*(unsigned char *)LP_ADDR_CONTROL = lp_ctrl_value;
// wait ack
while(!(*((unsigned char *)LP_ADDR_STATUS) & LP_nACK));
}
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -