/**
******************************************************************************
* @file GPIO_IOToggle_PollingMode\main.c
* @brief This file contains the main function for GPIO IOToggle_PollingMode example.
* @author STMicroelectronics - MCD Application Team
* @version V1.0.1
* @date 09/22/2008
******************************************************************************
*
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
* TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*
* <h2><center>© COPYRIGHT 2008 STMicroelectronics</center></h2>
* @image html **.bmp
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "stm8s_lib.h"
/**
* @addtogroup IOToggle_PollingMode
* @{
*/
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Evalboard I/Os configuration */
#define LEDS_PORT (GPIOD)
#define LED1_PIN (GPIO_PIN_3)
#define LED2_PIN (GPIO_PIN_2)
#define LED3_PIN (GPIO_PIN_0)
#define BUTTON_PORT (GPIOD)
#define BUTTON_PIN (GPIO_PIN_7)
#define ZLG7289_pinCLK1 0 //PE0时钟信号
#define ZLG7289_pinDIO1 1 //PE1数据信号,
#define ZLG7289_pinCS1 2 //PE2片选信号,低电平有效
#define ZLG7289_pinINT1 7 //PD7键盘中断请求信号,低电平(负边沿)有效
#define ZLG7289_pinCLK (GPIO_PIN_0) //PE0时钟信号,上升沿有效
#define ZLG7289_pinDIO (GPIO_PIN_1) //PE1数据信号,双向
#define ZLG7289_pinCS (GPIO_PIN_2) //PE2片选信号,低电平有效
#define ZLG7289_pinINT (GPIO_PIN_7) //PD7键盘中断请求信号,低电平(负边沿)有效
uint16 ZLG7289_Delay_t;
void ZLG7289_ShortDelay(void);
void ZLG7289_LongDelay(void);
void ZLG7289_SPI_Write(char dat);
char ZLG7289_SPI_Read(void);
void ZLG7289_cmd(char cmd);
void ZLG7289_cmd_dat(char cmd,char dat);
uint8 ZLG7289_Key(void);
void ZLG7289_Download(unsigned char mod, char x, bit dp, char dat);
void ZLG7289_Init(uint16 t);
/*********************************************************************
*
* 函 数 名: ZLG7289_ShortDelay()
* 功能描述: 校正
* 函数说明:
* 调用函数:
* 全局变量:
* 输 入:
* 返 回:
* 设 计 者: 日期:
* 修 改 者: 日期:
* 版 本:
***********************************************************************/
void ZLG7289_ShortDelay(void)
{
uint16 t=ZLG7289_Delay_t;
while (--t!=0);
}
/*********************************************************************
*
* 函 数 名: ZLG7289_LongDelay()
* 功能描述: 校正
* 函数说明:
* 调用函数:
* 全局变量:
* 输 入:
* 返 回:
* 设 计 者: 日期:
* 修 改 者: 日期:
* 版 本:
***********************************************************************/
void ZLG7289_LongDelay(void)
{
uint16 t=ZLG7289_Delay_t*6;
while (--t!=0);
}
/*********************************************************************
*
* 函 数 名: ZLG7289_Init()
* 功能描述:
* 函数说明:
* 调用函数:
* 全局变量:
* 输 入:
* 返 回:
* 设 计 者: 日期:
* 修 改 者: 日期:
* 版 本:
***********************************************************************/
void ZLG7289_Init(uint16 t)
{
GPIOE->DDR |= 0x07; /* Output. */
GPIOE->CR1 |= 0x07; /* PushPull. */
GPIOE->CR2 = 0x00; /* Output speed up to 2MHz. */
/* PD7 external interrupt */
//EXTI->CR1 = 0x00;
//EXTI->CR2 = 0x00;
//GPIOD->DDR &=~0x80;
//GPIOD->CR2 |= 0x80;
//GPIOE->ODR &= (u8)(~PortPins);
GPIOE->ODR &= (u8)(~(ZLG7289_pinCS));
GPIOE->ODR |= (ZLG7289_pinCLK);
GPIOE->ODR |= (ZLG7289_pinDIO);
GPIOD->ODR |= (ZLG7289_pinINT);
ZLG7289_Delay_t=t;
}
/*********************************************************************
*
* 函 数 名: ZLG7289_SPI_Write()
* 功能描述: 校正
* 函数说明:
* 调用函数:
* 全局变量:
* 输 入:
* 返 回:
* 设 计 者: 日期:
* 修 改 者: 日期:
* 版 本:
***********************************************************************/
void ZLG7289_SPI_Write(char dat)
{
unsigned char t=8;
GPIOE->DDR |= (ZLG7289_pinDIO); /* Output. */
GPIOE->CR1 |= (ZLG7289_pinDIO); /* PushPull. */
GPIOE->CR2 = 0x00; /* Output speed up to 2MHz. */
do
{
if(dat&0x80)
GPIOE->ODR |= (ZLG7289_pinDIO);
else
GPIOE->ODR &= (u8)(~(ZLG7289_pinDIO));
dat<<=1;
GPIOE->ODR |= (ZLG7289_pinCLK);
ZLG7289_ShortDelay();
GPIOE->ODR &= (u8)(~(ZLG7289_pinCLK));
ZLG7289_ShortDelay();
} while (--t!=0);
}
/*********************************************************************
*
* 函 数 名: ZLG7289_SPI_Read()
* 功能描述:
* 函数说明:
* 调用函数:
* 全局变量:
* 输 入:
* 返 回:
* 设 计 者: 日期:
* 修 改 者: 日期:
* 版 本:
***********************************************************************/
char ZLG7289_SPI_Read(void)
{
char dat;
unsigned char t=8;
// GPIOx->DDR &= (u8)(~(GPIO_Pin));
GPIOE->DDR &= (u8)(~(ZLG7289_pinDIO)); /* Output. */
GPIOE->CR1 &= (u8)(~(ZLG7289_pinDIO)); /* PushPull. */
GPIOE->CR2 &= (u8)(~(ZLG7289_pinDIO)); /* Output speed up to 2MHz. */
do
{
GPIOE->ODR |= (ZLG7289_pinCLK);
ZLG7289_ShortDelay();
dat<<=1;
if(GPIO_ReadInputPin(GPIOE, ZLG7289_pinDIO))dat++;
//return ((BitStatus)(GPIOx->IDR & (vu8)GPIO_Pin));
GPIOE->ODR &= (u8)(~ZLG7289_pinCLK);
ZLG7289_ShortDelay();
} while (--t!=0);
GPIOE->DDR |= (ZLG7289_pinDIO); /* Output. */
GPIOE->CR1 |= (ZLG7289_pinDIO); /* PushPull. */
GPIOE->CR2 = 0x00; /* Output speed up to 2MHz. */
return dat;
}
/*********************************************************************
*
* 函 数 名: ZLG7289_cmd()
* 功能描述:
* 函数说明:
* 调用函数:
* 全局变量:
* 输 入:
* 返 回:
* 设 计 者: 日期:
* 修 改 者: 日期:
* 版 本:
***********************************************************************/
void ZLG7289_cmd(char cmd)
{
GPIOE->ODR &= (u8)(~(ZLG7289_pinCS));
ZLG7289_LongDelay();
ZLG7289_SPI_Write(cmd);
GPIOE->ODR |= (ZLG7289_pinCS);
ZLG7289_LongDelay();
}
/*********************************************************************
*
* 函 数 名: ZLG7289_cmd_dat()
* 功能描述:
* 函数说明:
* 调用函数:
* 全局变量:
* 输 入:
* 返 回:
* 设 计 者: 日期:
* 修 改 者: 日期:
* 版 本:
***********************************************************************/
void ZLG7289_cmd_dat(char cmd,char dat)
{
GPIOE->ODR &= (u8)(~(ZLG7289_pinCS));
ZLG7289_LongDelay();
ZLG7289_SPI_Write(cmd);
ZLG7289_LongDelay();
ZLG7289_SPI_Write(dat);
GPIOE->ODR |= (ZLG7289_pinCS);
ZLG7289_LongDelay();
}
/*********************************************************************
*
* 函 数 名: ZLG7289_Key()
* 功能描述:
* 函数说明:
* 调用函数:
* 全局变量:
* 输 入:
* 返 回:
* 设 计 者: 日期:
* 修 改 者: 日期:
* 版 本:
***********************************************************************/
uint8 ZLG7289_Key(void)
{
uint8 key;
GPIOE->ODR &= (u8)(~(ZLG7289_pinCS));
ZLG7289_LongDelay();
ZLG7289_SPI_Write(0x15);
ZLG7289_LongDelay();
key=ZLG7289_SPI_Read();
GPIOE->ODR |= (ZLG7289_pinCS);
ZLG7289_LongDelay();
return key;
}
/*********************************************************************
*
* 函 数 名: ZLG7289_Download
* 功能描述:
* 函数说明:
* 调用函数:
* 全局变量:
* 输 入:
* 返 回:
* 设 计 者: 日期:
* 修 改 者: 日期:
* 版 本:
***********************************************************************/
void ZLG7289_Download(unsigned char mod, char x, bit dp, char dat)
{
char ModDat[3] = {0x80,0xC8,0x90};
char d1;
char d2;
if ( mod > 2 ) mod = 2;
d1 = ModDat[mod];
x &= 0x07;
d1 |= x;
d2 = dat & 0x7F;
if ( dp ) d2 |= 0x80;
ZLG7289_cmd_dat(d1,d2);
} |