diff options
author | Dean Camera <dean@fourwalledcubicle.com> | 2010-11-16 13:14:27 +0000 |
---|---|---|
committer | Dean Camera <dean@fourwalledcubicle.com> | 2010-11-16 13:14:27 +0000 |
commit | cbc00c843a3107b8c76f0b3f1e3425f924518416 (patch) | |
tree | 00776d360607a273bcb4abafb47133a3887761a5 /Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.c | |
parent | a9f313afa9a65a692718b8609fd47ae1dcb60523 (diff) | |
download | lufa-cbc00c843a3107b8c76f0b3f1e3425f924518416.tar.gz lufa-cbc00c843a3107b8c76f0b3f1e3425f924518416.tar.bz2 lufa-cbc00c843a3107b8c76f0b3f1e3425f924518416.zip |
Fixed AVRISP-MKII clone project not starting the target's program automatically after exiting TPI programming mode.
Diffstat (limited to 'Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.c')
-rw-r--r-- | Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.c b/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.c index 26d6bf16f..551d4029c 100644 --- a/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.c +++ b/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.c @@ -119,6 +119,40 @@ bool TINYNVM_WaitWhileNVMControllerBusy(void) } } +/** Enables the physical TPI interface on the target and enables access to the internal NVM controller. + * + * \return Boolean true if the TPI interface was enabled successfully, false otherwise + */ +bool TINYNVM_EnableTPI(void) +{ + /* Enable TPI programming mode with the attached target */ + XPROGTarget_EnableTargetTPI(); + + /* Lower direction change guard time to 0 USART bits */ + XPROGTarget_SendByte(TPI_CMD_SSTCS | TPI_CTRL_REG); + XPROGTarget_SendByte(0x07); + + /* Enable access to the XPROG NVM bus by sending the documented NVM access key to the device */ + XPROGTarget_SendByte(TPI_CMD_SKEY); + for (uint8_t i = sizeof(TPI_NVMENABLE_KEY); i > 0; i--) + XPROGTarget_SendByte(TPI_NVMENABLE_KEY[i - 1]); + + /* Wait until the NVM bus becomes active */ + return TINYNVM_WaitWhileNVMBusBusy(); +} + +/** Removes access to the target's NVM controller and physically disables the target's physical TPI interface. */ +void TINYNVM_DisableTPI(void) +{ + TINYNVM_WaitWhileNVMBusBusy(); + + /* Clear the NVMEN bit in the TPI STATUS register to disable TPI mode */ + XPROGTarget_SendByte(TPI_CMD_SSTCS | TPI_STATUS_REG); + XPROGTarget_SendByte(0x00); + + XPROGTarget_DisableTargetTPI(); +} + /** Reads memory from the target's memory spaces. * * \param[in] ReadAddress Start address to read from within the target's address space |