📄 ok7s256ads.h
字号:
/***********************************************************************************/
/* OK7S256ads.h : Definition & User Function for OK-7S256 V1.0 Training Kit */
/***********************************************************************************/
#define true -1 // true = 0xFFFFFFFF
#define false 0 // false = 0x00000000
#define EXT_OC 18432000 // external oscilator MAINCK
#define MCK 48000000 // master clock MCK
#define MCKKHz (MCK/1000) // MCK/1000
#define PA0 (1 << 0) // define bit number of PIO
#define PA1 (1 << 1)
#define PA2 (1 << 2)
#define PA7 (1 << 7)
#define PA8 (1 << 8)
#define PA15 (1 << 15)
#define PA17 (1 << 17)
#define PA18 (1 << 18)
#define PA19 (1 << 19)
#define PA20 (1 << 20)
#define PA21 (1 << 21)
#define PA22 (1 << 22)
#define PA23 (1 << 23)
#define LED1 PA0 // LED1,2 output signal
#define LED2 PA1
#define SPEAKER PA0 // speaker
#define BUZZER PA2 // buzzer output signal
#define KEY1 PA7 // KEY1,2 input signal
#define KEY2 PA8
#define CS1 PA15 // SPI CS1 output signal
#define J3 PA17 // J3 input signal
#define PCK1 PA17 // PCK1 output signal
#define LCD_RS PA18 // LCD output signal
#define LCD_E PA19
#define LCD_ALL (0xFF000000|LCD_E|LCD_RS)
#define GLCD_DI PA20 // GLCD output signal
#define GLCD_E PA21
#define GLCD_CS1 PA22
#define GLCD_CS2 PA23
#define GLCD_ALL (0xFF000000|GLCD_CS2|GLCD_CS1|GLCD_E|GLCD_DI)
void Delay_1us(void) /* 1 us delay for -O2 -Otime option */
{ volatile unsigned int count;
for(count = 0; count < 4; count++);
}
void Delay_us(unsigned int us) /* us delay for -O2 -Otime option */
{ volatile unsigned int count, countmax = (MCK / 9600000) * us;
for(count = 0; count < countmax; count++);
}
void Delay_ms(unsigned int ms) /* ms delay for -O2 -Otime option */
{ volatile unsigned int count, countmax = (MCK / 10000) * ms;
for(count = 0; count < countmax; count++);
}
void LED_on(unsigned int led) /* LED on */
{
AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, LED2|LED1); // PA1-PA0 = output
AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, led);
}
void LED_off(unsigned int led) /* LED off */
{
AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, LED2|LED1); // PA1-PA0 = output
AT91F_PIO_SetOutput(AT91C_BASE_PIOA, led);
}
void Buzzer_on(void) /* buzzer on */
{
AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, BUZZER);
}
void Buzzer_off(void) /* buzzer off */
{
AT91F_PIO_SetOutput(AT91C_BASE_PIOA, BUZZER);
}
void Beep(void) /* beep for 50 ms */
{
Buzzer_on();
Delay_ms(50);
Buzzer_off();
}
void Error(void) /* beep 3 times */
{
Beep();
Delay_ms(50);
Beep();
Delay_ms(50);
Beep();
}
__inline void AT91F_PIO_Opendrain( /* configure open drain */
AT91PS_PIO pPio, unsigned int multiDrvEnable)
{
// pPio->PIO_MDDR = ~multiDrvEnable;
pPio->PIO_MDER = multiDrvEnable;
}
__inline void AT91F_PIO_Pullup( /* configure pull up */
AT91PS_PIO pPio, unsigned int pullupEnable)
{
// pPio->PIO_PPUDR = ~pullupEnable;
pPio->PIO_PPUER = pullupEnable;
}
void MCU_initialize(void) /* initialize AT91SAM7S256 & OK-7S256 kit */
{
AT91F_RSTSetMode(AT91C_BASE_RSTC, AT91C_RSTC_URSTEN); // enable User Reset by NRST pin input
AT91F_PIOA_CfgPMC(); // enable clock of PIO
AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, LED2|LED1); // PA1-PA0 = output
LED_off(LED2|LED1); // LED2-LED1 off
AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, BUZZER); // PA2 = output
Buzzer_off(); // buzzer off
AT91F_PIO_CfgInput(AT91C_BASE_PIOA, J3|KEY2|KEY1); // PA17,PA8,PA7 = input with pullup
AT91F_PIO_Pullup(AT91C_BASE_PIOA, J3|KEY2|KEY1);
AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, LCD_ALL); // open drain output for LCD
AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, LCD_ALL);
AT91F_PIO_Opendrain(AT91C_BASE_PIOA, LCD_ALL);
AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, GLCD_ALL); // open drain output for GLCD
AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, GLCD_ALL);
AT91F_PIO_Opendrain(AT91C_BASE_PIOA, GLCD_ALL);
}
void LCD_command(unsigned int command) /* write a command(instruction) on text LCD */
{
AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, LCD_RS); // RS = 0
AT91F_PIO_SetOutput(AT91C_BASE_PIOA, command << 24); // output command
AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, (~command) << 24);
AT91F_PIO_SetOutput(AT91C_BASE_PIOA, LCD_E); // E = 1
Delay_1us();
AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, LCD_E); // E = 0
if(command & 0xFC) // wait for operation
Delay_us(50);
else
Delay_ms(2);
}
void LCD_data(unsigned int data) /* display a character on text LCD */
{
AT91F_PIO_SetOutput(AT91C_BASE_PIOA, LCD_RS); // RS = 1
AT91F_PIO_SetOutput(AT91C_BASE_PIOA, data << 24); // output data
AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, (~data) << 24);
AT91F_PIO_SetOutput(AT91C_BASE_PIOA, LCD_E); // E = 1
Delay_1us();
AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, LCD_E); // E = 0
Delay_us(50); // wait for operation
}
void LCD_initialize(void) /* initialize text LCD module */
{
AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, LCD_ALL); // open drain output
AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, LCD_ALL);
AT91F_PIO_Opendrain(AT91C_BASE_PIOA, LCD_ALL);
Delay_ms(2);
LCD_command(0x38); // function set(8 bit, 2 line, 5x7 dot)
LCD_command(0x0C); // display control(display on, cursor off)
LCD_command(0x06); // entry mode set(increment, not shift)
LCD_command(0x01); // clear display
}
void LCD_string(unsigned int command, char *string) /* display a string on text LCD */
{
LCD_command(command); // cursor position
while(*string != '\0') // display string
{ LCD_data(*string);
string++;
}
}
unsigned char key_flag = 0;
unsigned int Key_in(void) /* input key KEY2 - KEY1 without debouncing */
{ unsigned int keycode; // (no input = 0, KEY1 = 1, KEY2 = 2)
AT91F_PIO_CfgInput(AT91C_BASE_PIOA, KEY2|KEY1); // PA8,PA7 = input with pullup
AT91F_PIO_Pullup(AT91C_BASE_PIOA, KEY2|KEY1);
keycode = (~(AT91F_PIO_GetInput(AT91C_BASE_PIOA) >> 7)) & 0x00000003;
return keycode;
}
unsigned int Key_input(void) /* input key KEY2 - KEY1 with debouncing */
{ unsigned int key; // (no input = 0, KEY1 = 1, KEY2 = 2)
key = Key_in(); // any key pressed ?
if(key == 0) // if no key, check key off
{ if(key_flag == 0)
return key;
else
{ Delay_ms(20);
key_flag = 0;
return key;
}
}
else // if key input, check continuous key
{ if(key_flag != 0) // if continuous key, treat as no key input
return 0;
else // if new key, beep and delay for debounce
{ Beep();
key_flag = 1;
return key;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -