/**
******************************************************************************
* @file V_MC74HC595.h
* @author LuJ
* @version V3.5.0
* @date 2015-03-31
* @brief 移位寄存器头文件管理
******************************************************************************
* (C) Copyright Vango Technoglogy, Inc. 2015
******************************************************************************
*/
#ifndef __V_MC74HC595_H
#define __V_MC74HC595_H
#include "stm32f10x.h"
//位带操作,实现51类似的GPIO控制功能
//具体实现思想,参考<<CM3权威指南>>第五章(87页~92页).
#define V_74TCLK_OUT *((volatile unsigned long *)((((GPIOF_BASE+12) & 0xF0000000)+0x2000000+(((GPIOF_BASE+12) &0xFFFFF)<<5)+(4<<2))))
#define V_74HCLK_OUT *((volatile unsigned long *)((((GPIOF_BASE+12) & 0xF0000000)+0x2000000+(((GPIOF_BASE+12) &0xFFFFF)<<5)+(5<<2))))
#define V_74OE_OUT *((volatile unsigned long *)((((GPIOF_BASE+12) & 0xF0000000)+0x2000000+(((GPIOF_BASE+12) &0xFFFFF)<<5)+(6<<2))))
#define V_74SDI_OUT *((volatile unsigned long *)((((GPIOF_BASE+12) & 0xF0000000)+0x2000000+(((GPIOF_BASE+12) &0xFFFFF)<<5)+(7<<2))))
#define MC74HC595_OUT_V_SELA ((uint32_t)0x00000001)//MC74HC595移位寄存器
#define MC74HC595_OUT_V_SELB ((uint32_t)0x00000002)
#define MC74HC595_OUT_V_SELC ((uint32_t)0x00000004)
#define MC74HC595_OUT_V_SEL_EN ((uint32_t)0x00000008)
#define MC74HC595_OUT_V_SEL_PWM1 ((uint32_t)0x00000010)
#define MC74HC595_OUT_V_SEL_PWM2 ((uint32_t)0x00000020)
#define MC74HC595_OUT_V_SEL_UART ((uint32_t)0x00000040)
#define MC74HC595_OUT_V_RSTn ((uint32_t)0x00000080)
#define MC74HC595_OUT_V_VDCIN ((uint32_t)0x00000100)
#define MC74HC595_OUT_V_V3V ((uint32_t)0x00000200)
#define MC74HC595_OUT_VT_MODE0 ((uint32_t)0x00000400)
#define MC74HC595_OUT_VT_MODE1 ((uint32_t)0x00000800)
#define MC74HC595_OUT_V_DVCC_ctr2 ((uint32_t)0x00001000)
#define MC74HC595_OUT_V_DVCC_ctr1 ((uint32_t)0x00002000)
#define MC74HC595_OUT_V_LDO33_ctr2 ((uint32_t)0x00004000)
#define MC74HC595_OUT_V_LDO33_ctr1 ((uint32_t)0x00008000)
#define MC74HC595_OUT_V_vPower_ctr1 ((uint32_t)0x00010000)
#define MC74HC595_OUT_V_vPower_ctr2 ((uint32_t)0x00020000)
#define MC74HC595_OUT_V_vPower_ctr3 ((uint32_t)0x00040000)
#define MC74HC595_OUT_V_SPI1_CS1 ((uint32_t)0x00080000)
#define MC74HC595_OUT_V_SPI1_CS2 ((uint32_t)0x00100000)
#define MC74HC595_OUT_V_W25Q_CS ((uint32_t)0x00200000)
#define MC74HC595_OUT_V_DS3231_ctr1 ((uint32_t)0x00400000)
#define MC74HC595_OUT_V_DS3231_ctr2 ((uint32_t)0x00800000)
#define MC74HC595_OUT_V_LED1 ((uint32_t)0x01000000)
#define MC74HC595_OUT_V_LED2 ((uint32_t)0x02000000)
#define MC74HC595_OUT_V_LED3 ((uint32_t)0x04000000)
#define Target_SET_DVCC_ctr1 ((uint8_t)0x01)//DVCC控制,ctr1和ctr2不同时打开
#define Target_SET_DVCC_ctr2 ((uint8_t)0x02)
#define Target_RESET_DVCC_ctr ((uint8_t)0x80)
#define Target_SET_LDO33_ctr1 ((uint8_t)0x01)//LDO33控制
#define Target_SET_LDO33_ctr2 ((uint8_t)0x02)
#define Target_RESET_LDO33_ctr ((uint8_t)0x80)
#define Target_SET_vPower_ctr1 ((uint8_t)0x01)//Target的电源供给控制
#define Target_SET_vPower_ctr2 ((uint8_t)0x02)
#define Target_SET_vPower_ctr3 ((uint8_t)0x04)
#define Target_RESET_vPower_ctr ((uint8_t)0x80)
#define Target_SET_DS3231_ctr1 ((uint8_t)0x01)//DS3231秒脉冲和32KHz输出控制
#define Target_SET_DS3231_ctr2 ((uint8_t)0x02)
#define Target_RESET_DS3231_ctr ((uint8_t)0x80)
#define STM32_SET_LED_1 ((uint8_t)0x01)//STM32外围LED灯控制
#define STM32_SET_LED_2 ((uint8_t)0x02)
#define STM32_SET_LED_3 ((uint8_t)0x04)
#define STM32_RESET_LED_x ((uint8_t)0x80)
#define ADG1408_Type_SEGx ((uint8_t)0x01)//模拟开关类型选择,可选择SEG/UART/PWM1/PWM2
#define ADG1408_Type_UARTx ((uint8_t)0x02)
#define ADG1408_Type_PWM1 ((uint8_t)0x04)
#define ADG1408_Type_PWM2 ((uint8_t)0x08)
#define ADG1408_Type_AllClose ((uint8_t)0x80)
#define ADG1408_Channel_1 ((uint8_t)0x00)//模拟开关通道1-8选择
#define ADG1408_Channel_2 ((uint8_t)0x01)
#define ADG1408_Channel_3 ((uint8_t)0x02)
#define ADG1408_Channel_4 ((uint8_t)0x03)
#define ADG1408_Channel_5 ((uint8_t)0x04)
#define ADG1408_Channel_6 ((uint8_t)0x05)
#define ADG1408_Channel_7 ((uint8_t)0x06)
#define ADG1408_Channel_8 ((uint8_t)0x07)
extern uint32_t mc74hc595_val;
void V_74HC595_Init(void);//初始化
void V_74HC595_ShiftOuput(u32 shift_val);
void T_ADG1408_Select(uint8_t ADG1408_Type_x,uint8_t ADG1408_Channel_x);
void T_Target_RSTn(void);
void T_Target_VDCIN(BitAction BitVal);
void T_Target_V3V(BitAction BitVal);
void T_Target_MODEx(BitAction BitMode0,BitAction BitMode1);
void T_Target_DVCC_ctr(uint8_t DVCC_ctr_x);
void T_Target_LDO33_ctr(uint8_t LDO33_ctr_x);
void T_Target_vPower_ctr(uint8_t vPower_ctr_x);
void T_ADS8332_SPI1_CS1(BitAction BitVal);
void T_TLV5618_SPI1_CS2(BitAction BitVal);
void W25Q80_W25Q_CS(BitAction BitVal);
void V_DS3231_ctr(uint8_t DS3231_ctr_x);
void STM32_V_LEDx(uint8_t STM32_SET_LED_x);
void V_74HC595_Test(void);
#endif
/**
******************************************************************************
* @file V_MC74HC595.c
* @author LuJ
* @version V3.5.0
* @date 2015-03-31
* @brief MC74HC595移位寄存器 驱动
******************************************************************************
* (C) Copyright Vango Technoglogy, Inc. 2015
******************************************************************************
*/
#include "st_lib.h"
#include "V_MC74HC595.h"
uint32_t mc74hc595_val=0x07380980;//全局变量,控制移位寄存器输出状态
/**
* 函数功能:移位寄存器IO配置.初始化PF4/PF5/PF6/PF7为输出口,并使能这两个口的时钟
* 输入参数:无
* 输出参数:无
* 全局变量:无
* 作者:LuJ
* 修改日期:2015/03/31
* 备注:无
*/
void V_74HC595_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_TypeDef* GPIOx;
uint16_t GPIO_Pin_x;
GPIOx = GPIOF;
GPIO_Pin_x = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;//移位寄存器硬件对应IO
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);//使能PF端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_x;//74HC595端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//IO口速度为50MHz
GPIO_Init(GPIOx, &GPIO_InitStructure);//根据设定参数初始化GPIOx
GPIO_ResetBits(GPIOx,GPIO_Pin_x);//输出低
}
/**
* 函数功能:移位寄存器移位输出