📄 lcd4.11.txt
字号:
//***********************************************************************************
// 列53(列结尾) <------- 列0(列开始)
// |-----------------------------| 行0(行开始)
// |-----------------------------| |
// |-----------------------------| |
// ......... |
// ......... \/
// |-----------------------------|
// |-----------------------------|
// |-----------------------------|
// |-----------------------------| 行159(行结束)
//当前选择的模式是行不变,列变成由3小列组成一大列。
//文字显示从列0行0开始。
//***********************************************************************************
#include "project.h"
#include "SMC2.c"
// EBI_CS0
#define AT91C_EBI_CS0 ((char *) 0x10000000) // EBI Chip Select 0 base address
#define AT91C_EBI_CS0_SIZE ((unsigned int) 0x10000000) // EBI Chip Select 0 size in byte (262144 Kbytes)
#define AT91C_EBI_CS1 ((char *) 0x20000000) // EBI Chip Select 1 base address
#define AT91C_BASE_SMC ((AT91PS_SMC2) 0xFFFFFF90) // (SMC) Base Address
#define AT91C_SMC_BASE_Cmd ((volatile unsigned char *)0x10000000)
#define AT91C_SMC_BASE_Data ((volatile unsigned char *)0x10000001)
#define WAIT_TIME AT91B_MCK
void init_io(void)
{
AT91S_SMC2 *pSMC = AT91C_BASE_SMC;
//---------------------------------------------
// 禁止下列PIOA I/O功能
/***************************************
*AT91C_PIOA_PDR = AT91C_PA0_A0_NBS0 |
AT91C_PA1_A1_NBS2 |
AT91C_PA2_A2 |
AT91C_PA3_A3 |
AT91C_PA4_A4 |
AT91C_PA5_A5 |
AT91C_PA6_A6 |
AT91C_PA7_A7 |
AT91C_PA8_A8 |
AT91C_PA9_A9 |
AT91C_PA10_A10 |
AT91C_PA11_A11 |
AT91C_PA12_A12 |
AT91C_PA13_A13 |
AT91C_PA14_A14 |
AT91C_PA15_A15 |
AT91C_PA22_NCS5_CFCE1;
// PIOA选择B外设功能
// PIOA0~PIOA15为外部总线地址线
*AT91C_PIOA_BSR = AT91C_PA0_A0_NBS0 |
AT91C_PA1_A1_NBS2 |
AT91C_PA2_A2 |
AT91C_PA3_A3 |
AT91C_PA4_A4 |
AT91C_PA5_A5 |
AT91C_PA6_A6 |
AT91C_PA7_A7 |
AT91C_PA8_A8 |
AT91C_PA9_A9 |
AT91C_PA10_A10 |
AT91C_PA11_A11 |
AT91C_PA12_A12 |
AT91C_PA13_A13 |
AT91C_PA14_A14 |
AT91C_PA15_A15 |
AT91C_PA22_NCS5_CFCE1;
********************************************************/
// 禁止下列PIOB I/O功能
*AT91C_PIOB_PDR = AT91C_PB0_A0_NBS0; // PIOB选择A外设功能
*AT91C_PIOB_BSR = AT91C_PB0_A0_NBS0;
// 禁止下列PIOC I/O功能
*AT91C_PIOC_PDR = AT91C_PC0_D0 |
AT91C_PC1_D1 |
AT91C_PC2_D2 |
AT91C_PC3_D3 |
AT91C_PC4_D4 |
AT91C_PC5_D5 |
AT91C_PC6_D6 |
AT91C_PC7_D7 |
AT91C_PC8_D8 |
AT91C_PC9_D9 |
AT91C_PC10_D10 |
AT91C_PC11_D11 |
AT91C_PC12_D12 |
AT91C_PC13_D13 |
AT91C_PC14_D14 |
AT91C_PC15_D15 |
// AT91C_PC16_NWAIT |
AT91C_PC21_NWR0_NWE_CFWE |
AT91C_PC22_NRD_CFOE |
AT91C_PC23_NCS0;
// PIOC选择A外设功能
// PIOC0~PIOC15为外部总线数据线
*AT91C_PIOC_ASR = AT91C_PC0_D0 |
AT91C_PC1_D1 |
AT91C_PC2_D2 |
AT91C_PC3_D3 |
AT91C_PC4_D4 |
AT91C_PC5_D5 |
AT91C_PC6_D6 |
AT91C_PC7_D7 |
AT91C_PC8_D8 |
AT91C_PC9_D9 |
AT91C_PC10_D10 |
AT91C_PC11_D11 |
AT91C_PC12_D12 |
AT91C_PC13_D13 |
AT91C_PC14_D14 |
AT91C_PC15_D15;
// PIOC选择B外设功能
// PIOC21,PIOC22分别是外部总线写,读信号
*AT91C_PIOC_BSR = AT91C_PC21_NWR0_NWE_CFWE |
//AT91C_PC16_NWAIT |
AT91C_PC22_NRD_CFOE |
AT91C_PC23_NCS0;
pSMC->SMC2_CSR[0] = AT91C_SMC2_BAT;
}
void AT91F_EBI_SMC_CfgPIO(void)
{
// Configure PIO controllers to periph mode
// AT91F_PIO_CfgPeriph(
//AT91C_BASE_PIOA, // PIO controller base address
//0, // Peripheral A
//((unsigned int) AT91C_PA19_NCS4_CFCS0)
//); // Peripheral B
// Configure PIO controllers to periph mode
AT91F_PIO_CfgPeriph(
AT91C_BASE_PIOB, // PIO controller base address
0, // Peripheral A
((unsigned int) AT91C_PB0_A0_NBS0 ) |
((unsigned int) AT91C_PB2_A2 ) |
((unsigned int) AT91C_PB3_A3 ) |
((unsigned int) AT91C_PB4_A4 ) |
((unsigned int) AT91C_PB5_A5 ) |
((unsigned int) AT91C_PB6_A6 ) |
((unsigned int) AT91C_PB7_A7 ) |
((unsigned int) AT91C_PB8_A8 ) |
((unsigned int) AT91C_PB9_A9 ) |
((unsigned int) AT91C_PB10_A10 ) |
((unsigned int) AT91C_PB11_A11 ) |
((unsigned int) AT91C_PB12_A12 ) |
((unsigned int) AT91C_PB13_A13 ) |
((unsigned int) AT91C_PB14_A14 ) |
((unsigned int) AT91C_PB15_A15 ) |
((unsigned int) AT91C_PB16_A16_BA0 ) |
((unsigned int) AT91C_PB17_A17_BA1 )
); // Peripheral B
// Configure PIO controllers to periph mode
AT91F_PIO_CfgPeriph(
AT91C_BASE_PIOC, // PIO controller base address
((unsigned int) AT91C_PC10_D10 ) |
((unsigned int) AT91C_PC11_D11 ) |
((unsigned int) AT91C_PC12_D12 ) |
((unsigned int) AT91C_PC13_D13 ) |
((unsigned int) AT91C_PC14_D14 ) |
((unsigned int) AT91C_PC15_D15 ) |
((unsigned int) AT91C_PC0_D0 ) |
((unsigned int) AT91C_PC1_D1 ) |
((unsigned int) AT91C_PC2_D2 ) |
((unsigned int) AT91C_PC3_D3 ) |
((unsigned int) AT91C_PC4_D4 ) |
((unsigned int) AT91C_PC5_D5 ) |
((unsigned int) AT91C_PC6_D6 ) |
((unsigned int) AT91C_PC7_D7 ) |
((unsigned int) AT91C_PC8_D8 ) |
((unsigned int) AT91C_PC9_D9 )
, // Peripheral A
((unsigned int) AT91C_PC21_NWR0_NWE_CFWE ) |
((unsigned int) AT91C_PC22_NRD_CFOE )|
((unsigned int) AT91C_PC23_NCS0 )
); // Peripheral B
}
//*----------------------------------------------------------------------------
//* \fn AT91F_InitSMC SMC初始化函数
//* \brief Init EBI and SMC controler for MT48LC16M16A2
//*----------------------------------------------------------------------------
void AT91F_InitSMC(void)
{
volatile unsigned int i;
AT91PS_SMC2 psmc = AT91C_BASE_SMC;
// AT91S_SMC2 psmc = AT91C_BASE_SMC;
// Init the EBI for SMC
AT91C_BASE_EBI -> EBI_CSA = AT91C_EBI_CS1A_SMC;
init_io();
AT91F_EBI_SMC_CfgPIO();
psmc -> SMC2_CSR[0] = AT91C_SMC2_NWS | // (SMC2) Number of Wait States设定等待数目
AT91C_SMC2_WSEN | //(SMC2) Wait State Enable 等待状态使能
AT91C_SMC2_TDF | // (SMC2) Data Float Time
AT91C_SMC2_BAT | // (SMC2) Byte Access Type
AT91C_SMC2_DBW_16 | // (SMC2) 16-bit. 设定数据总线宽度
AT91C_SMC2_DRP | // (SMC2) Data Read Protocol 设定读信号的协议形式=标准
//AT91C_SMC2_ACSS | // (SMC2) Address to Chip Select Setup 片选启动地址
//AT91C_SMC2_ACSS_STANDARD| // (SMC2) Standard, asserted at the beginning of the access and deasserted at the end.
AT91C_SMC2_ACSS_1_CYCLE | // 可改周期(SMC2) One cycle less at the beginning and the end of the access.
AT91C_SMC2_RWSETUP | // (SMC2) Read and Write Signal Setup Time读写信号的启动时间
AT91C_SMC2_RWHOLD ; // (SMC2) Read and Write Signal Hold Time读写信号的继续保持时间
//设置控制寄存器NCS0(连接上外设RAm)
}
#define AT91D_BASE_PIO_RST (AT91C_BASE_PIOA)
#define AT91B_RST (1<<8) // PA8 PA0/PWM0/A0/ NBS0
#define AT91C_PIO_PA8 ((unsigned int) 1 << 8) // Pin Controlled by PA8
//****************************************************************************************************
void Delay(void);
void LCD_Reset(void );
void LCD_DataWrite(unsigned char);
void LCD_INITIAL(void);
void LCD_CmdWrite(unsigned char);
void WretPointTest(unsigned char);
char DisPlay(unsigned char ucStartX,unsigned char ucStartY,const unsigned char ucDisTable[],unsigned char ucFontWide,unsigned char ucFontHeight);
void SetAddress(unsigned char,unsigned char);
unsigned char LCD_DataRead(void);
//****************************************************************************************************
////////////////延时程序/////////////////////
void Delay ( void )
{
//* Set in Volatile for Optimisation
int i ;
//* loop delay
for ( i = 0 ;i < 50000000 ;i++ ) ;
}
////////////////////////延时程序///////////////////////////////////////////
void delay_1us(void) //1us延时函数
{
asm("nop");
}
void delay_nus(unsigned int n) //N us延时函数
{
unsigned int i=0;
for (i=0;i<n;i++)
delay_1us();
}
void delay_1ms(void) //1ms延时函数
{
unsigned int i;
for (i=0;i<1356;i++);
}
/* 延时n个单位时间 */
void delay_nms(unsigned int n) //N ms延时函数
{
unsigned int i=0;
for (i=0;i<n;i++)
delay_1ms();
}
void delay(unsigned int n) //N ms延时函数
{
unsigned int i=0;
for (i=0;i<n;i++)
asm("nop");
}
/****************************************************
void init_devices(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -