📄 hvpp.c
字号:
////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file HVPP.c
/// @author Simon Qian(webmaster@SimonQian.com)
/// @date Last Update on 2008-04-07
/// @brief HVPP Programming Protocol for AVR
/// @par license
/// AVRminiProg is distributed under the terms and conditions of GPLv2, see License.txt
////////////////////////////////////////////////////////////////////////////////////////////////////
#include <avr/io.h>
#include "../../../type.h"
#include "../../../app_cfg.h"
#include "../../../MCU/gpio.h"
#include "../../../Delay/delay.h"
#include "../HV.h"
#include "HVPP.h"
#if AVRP_HVPP_SHOULD_ENABLE
extern uint8 hvControlStack[32];
/// HVPP Change Control Line
/// @param[in] mode change to mode
void HVPP_ChangeMode(uint8 mode)
{
HVPP_CTRL_Out(mode);
}
/// HVPP Write Data
/// @param[in] mode Write data in mode
/// @param[in] data Data to write
/// @return Success
uint8 HVPP_WriteData(uint8 mode,uint8 data)
{
HVPP_ChangeMode(mode);
HVPP_DATA_SetOutput();
HVPP_DATA_Out(data);
#ifdef HVPP_SignalDelay_InUS
DelayUS(HVPP_SignalDelay_InUS);
#endif
HVPP_XTAL1_PPulse();
#ifdef HVPP_SignalDelay_InUS
DelayUS(HVPP_SignalDelay_InUS);
#endif
return HVPP_Success;
}
/// HVPP Initialization
/// @return
void HVPP_Init(void)
{
HV_Init();
// HVPP_DATA_SetInput();
HVPP_XTAL1_Clr();
HVPP_XTAL1_SetOutput();
HVPP_CTRL_Out(hvControlStack[0]);
HVPP_CTRL_SetOutput();
}
/// HVPP Finilization
/// @return
void HVPP_Fini(void)
{
HV_Fini();
HVPP_DATA_SetInput();
HVPP_CTRL_SetInput();
HVPP_XTAL1_SetInput();
HVPP_DATA_Out(0);
HVPP_CTRL_Out(0);
HVPP_XTAL1_Clr();
}
/// HVPP Wait Ready
/// @return Ready or Not
uint8 HVPP_RDY_Wait(void)
{
uint16 dly = 0xFFFF;
while(!HVPP_RDY_Get() && (--dly > 0));
if(dly)
return HVPP_Success;
else
return HVPP_Error;
}
#endif // #if AVRP_HVPP_SHOULD_ENABLE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -