mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
TwlSDKがあやしいのでスタックの位置を0x03FFXXXXに固定するようにした
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@126 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
d04239ff88
commit
32957c8e3c
@ -24,6 +24,8 @@
|
|||||||
#include <devices/sdmc_config.h>
|
#include <devices/sdmc_config.h>
|
||||||
#include <twl/devices/sdmc/ARM7/sdmc.h>
|
#include <twl/devices/sdmc/ARM7/sdmc.h>
|
||||||
|
|
||||||
|
//#define USE_SPECULATIVE_READ
|
||||||
|
|
||||||
extern u32 NAND_FAT_PARTITION_COUNT;
|
extern u32 NAND_FAT_PARTITION_COUNT;
|
||||||
|
|
||||||
#define DMA_PIPE 2
|
#define DMA_PIPE 2
|
||||||
@ -35,7 +37,9 @@ extern u32 NAND_FAT_PARTITION_COUNT;
|
|||||||
extern volatile SDMC_ERR_CODE SDCARD_ErrStatus;
|
extern volatile SDMC_ERR_CODE SDCARD_ErrStatus;
|
||||||
extern s16 SDCARD_SDHCFlag; /* SDHCカードフラグ */
|
extern s16 SDCARD_SDHCFlag; /* SDHCカードフラグ */
|
||||||
extern SDPortContext* SDNandContext; /* NAND初期化パラメータ */
|
extern SDPortContext* SDNandContext; /* NAND初期化パラメータ */
|
||||||
|
#ifdef USE_SPECULATIVE_READ
|
||||||
|
static u32 currentSector;
|
||||||
|
#endif
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: WaitFifoFull
|
Name: WaitFifoFull
|
||||||
|
|
||||||
@ -59,6 +63,80 @@ static inline void WaitFifoFull( void )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: StopToRead
|
||||||
|
|
||||||
|
Description: stop to read from SD I/F
|
||||||
|
|
||||||
|
SDカードからの読み込みの完了処理を行います。
|
||||||
|
|
||||||
|
Arguments: None
|
||||||
|
|
||||||
|
Returns: None
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
static void StopToRead( void )
|
||||||
|
{
|
||||||
|
#ifdef NAND_FAT_PARTITION_COUNT
|
||||||
|
if ( *SDIF_CNT & SDIF_CNT_USEFIFO )
|
||||||
|
{
|
||||||
|
SD_AndFPGA( SD_INFO2,(~(SD_INFO2_ERROR_SET))); /* SD_INFO2のエラーフラグを全て落とす */
|
||||||
|
SD_OrFPGA( SD_INFO2_MASK, SD_INFO2_MASK_ERRSET); /* 全てのエラー割り込みを禁止 */
|
||||||
|
SD_OrFPGA( SD_INFO1_MASK, SD_INFO1_MASK_ALL_END); /* INFO1の access all end 割込み禁止 */
|
||||||
|
SD_TransEndFPGA(); /* 強制的にカード転送の終了処理 */
|
||||||
|
SD_StopTransmission(); /* 強制的にカード転送終了設定 */
|
||||||
|
// SDCARD_EndFlag
|
||||||
|
if ( SDCARD_ErrStatus )
|
||||||
|
{
|
||||||
|
//OS_TPrintf("R1_STATUS (1st).\n");
|
||||||
|
SD_SendStatus(); /* CMD13 addressed card sends its status register 発行、レスポンス待ち */
|
||||||
|
|
||||||
|
if( !SDCARD_ErrStatus ) /* エラーステータスの確認(エラー有り?)*/
|
||||||
|
{
|
||||||
|
u16 usRSP0;
|
||||||
|
//OS_TPrintf("R1_STATUS (2nd).\n");
|
||||||
|
SD_GetFPGA( usRSP0, SD_RSP0);
|
||||||
|
usRSP0 = (u16)(( usRSP0 & RSP_R1_CURRENT_STATE) >> 1); /* カレントステートを取り出す */
|
||||||
|
if((usRSP0 == CURRENT_STATE_DATA) || (usRSP0 == CURRENT_STATE_RCV)){ /* SDCARD Status が data rcv の時 */
|
||||||
|
SD_Command(SD_CMD_CMD | STOP_TRANSMISSION); /* CMD12(StopTransmission)発行処理 */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!(SDCARD_ErrStatus & SDMC_ERR_R1_STATUS)) /* コマンドレスポンス(R1)のカードステータスがエラーでないか? */
|
||||||
|
{
|
||||||
|
//OS_TPrintf("R1_STATUS (3rd).\n");
|
||||||
|
SD_CheckStatus(TRUE); /* コマンドレスポンス(R1)の Card Status チェック */
|
||||||
|
if(!(SDCARD_ErrStatus & SDMC_ERR_R1_STATUS)) /* コマンドレスポンス(R1)のカードステータスがエラーでないか? */
|
||||||
|
{
|
||||||
|
//OS_TPrintf("R1_STATUS (4th).\n");
|
||||||
|
SD_SendStatus(); /* カードステータスの取得コマンド発行 */
|
||||||
|
SD_CheckStatus(TRUE); /* コマンドレスポンス(R1)の Card Status チェック */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if( !SD_CheckFPGAReg( SD_STOP,SD_STOP_SEC_ENABLE ) ){
|
||||||
|
//OS_TPrintf("SD_StopTransmission.\n");
|
||||||
|
SD_StopTransmission(); /* カード転送終了をFPGAに通知(CMD12発行) */
|
||||||
|
}
|
||||||
|
SD_DisableClock(); /* クロック供給停止 */
|
||||||
|
|
||||||
|
*SDIF_CNT = (*SDIF_CNT & ~SDIF_CNT_USEFIFO) | SDIF_CNT_FCLR; /* FIFO使用フラグOFF */
|
||||||
|
CC_EXT_MODE = CC_EXT_MODE_PIO; /* PIOモード(DMAモードOFF) */
|
||||||
|
//OS_TPrintf("DONE\n");
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
if ( *SDIF_CNT & SDIF_CNT_USEFIFO )
|
||||||
|
{
|
||||||
|
if( !SD_CheckFPGAReg( SD_STOP,SD_STOP_SEC_ENABLE ) ){
|
||||||
|
SD_StopTransmission(); /* カード転送終了をFPGAに通知(CMD12発行) */
|
||||||
|
}
|
||||||
|
SD_TransEndFPGA(); /* 転送終了処理(割り込みマスクを禁止に戻す) */
|
||||||
|
SD_DisableClock(); /* クロック供給停止 */
|
||||||
|
|
||||||
|
*SDIF_CNT = (*SDIF_CNT & ~SDIF_CNT_USEFIFO) | SDIF_CNT_FCLR; /* FIFO使用フラグOFF */
|
||||||
|
CC_EXT_MODE = CC_EXT_MODE_PIO; /* PIOモード(DMAモードOFF) */
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: StartToRead
|
Name: StartToRead
|
||||||
|
|
||||||
@ -73,6 +151,15 @@ static inline void WaitFifoFull( void )
|
|||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
static void StartToRead(u32 block, u32 count)
|
static void StartToRead(u32 block, u32 count)
|
||||||
{
|
{
|
||||||
|
#ifdef USE_SPECULATIVE_READ
|
||||||
|
if ( currentSector == block )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
StopToRead();
|
||||||
|
currentSector = block;
|
||||||
|
count = 0xFFFF;
|
||||||
|
#endif
|
||||||
*SDIF_FSC = count;
|
*SDIF_FSC = count;
|
||||||
*SDIF_FDS = SECTOR_SIZE;
|
*SDIF_FDS = SECTOR_SIZE;
|
||||||
*SDIF_CNT = (*SDIF_CNT & ~(SDIF_CNT_FEIE | SDIF_CNT_FFIE)) | SDIF_CNT_FCLR | SDIF_CNT_USEFIFO;
|
*SDIF_CNT = (*SDIF_CNT & ~(SDIF_CNT_FEIE | SDIF_CNT_FFIE)) | SDIF_CNT_FCLR | SDIF_CNT_USEFIFO;
|
||||||
@ -91,29 +178,6 @@ static void StartToRead(u32 block, u32 count)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
|
||||||
Name: StopToRead
|
|
||||||
|
|
||||||
Description: stop to read from SD I/F
|
|
||||||
|
|
||||||
SDカードからの読み込みの完了処理を行います。
|
|
||||||
|
|
||||||
Arguments: None
|
|
||||||
|
|
||||||
Returns: None
|
|
||||||
*---------------------------------------------------------------------------*/
|
|
||||||
static void StopToRead( void )
|
|
||||||
{
|
|
||||||
if( !SD_CheckFPGAReg( SD_STOP,SD_STOP_SEC_ENABLE ) ){
|
|
||||||
SD_StopTransmission(); /* カード転送終了をFPGAに通知(CMD12発行) */
|
|
||||||
}
|
|
||||||
SD_TransEndFPGA(); /* 転送終了処理(割り込みマスクを禁止に戻す) */
|
|
||||||
SD_DisableClock(); /* クロック供給停止 */
|
|
||||||
|
|
||||||
*SDIF_CNT = (*SDIF_CNT & ~SDIF_CNT_USEFIFO) | SDIF_CNT_FCLR; /* FIFO使用フラグOFF */
|
|
||||||
CC_EXT_MODE = CC_EXT_MODE_PIO; /* PIOモード(DMAモードOFF) */
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
FATFS-SDMCの間にAESを組み込む
|
FATFS-SDMCの間にAESを組み込む
|
||||||
一部の設定は、FATFSを迂回して設定することになる。
|
一部の設定は、FATFSを迂回して設定することになる。
|
||||||
@ -183,6 +247,7 @@ void FATFS_DisableAES( void )
|
|||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
static u16 ReadNormal(u32 block, void *dest, u16 count)
|
static u16 ReadNormal(u32 block, void *dest, u16 count)
|
||||||
{
|
{
|
||||||
|
#if 1 // use TIMING_SD_1 or not
|
||||||
MINDmaConfig config =
|
MINDmaConfig config =
|
||||||
{
|
{
|
||||||
MI_NDMA_NO_INTERVAL,
|
MI_NDMA_NO_INTERVAL,
|
||||||
@ -191,11 +256,68 @@ static u16 ReadNormal(u32 block, void *dest, u16 count)
|
|||||||
SECTOR_SIZE/4
|
SECTOR_SIZE/4
|
||||||
};
|
};
|
||||||
// OS_TPrintf("ReadNormal(0x%X, 0x%08X, 0x%X) is calling.\n", block, dest, count);
|
// OS_TPrintf("ReadNormal(0x%X, 0x%08X, 0x%X) is calling.\n", block, dest, count);
|
||||||
MI_NDmaRecvExAsync_Dev( DMA_PIPE, SDIF_FI, dest, (u32)(count * SECTOR_SIZE), NULL, NULL, &config, MI_NDMA_TIMING_SD_1 );
|
#ifdef USE_SPECULATIVE_READ
|
||||||
StartToRead( block, count );
|
if (block == currentSector)
|
||||||
|
{
|
||||||
|
//StartToRead( block, 1 );
|
||||||
|
WaitFifoFull();
|
||||||
|
MI_NDmaRecvAsync( DMA_PIPE, SDIF_FI, dest, SECTOR_SIZE, NULL, NULL );
|
||||||
|
block++;
|
||||||
|
dest = (u8*)dest + SECTOR_SIZE;
|
||||||
|
count--;
|
||||||
|
currentSector++;
|
||||||
|
if (count == 0)
|
||||||
|
{
|
||||||
MI_WaitNDma( DMA_PIPE );
|
MI_WaitNDma( DMA_PIPE );
|
||||||
StopToRead();
|
return SDCARD_ErrStatus;
|
||||||
|
}
|
||||||
|
// ここまでで次のFIFO FULL前であると仮定しているが、問題ない?
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
MI_NDmaRecvExAsync_Dev( DMA_RECV, SDIF_FI, dest, (u32)(count * SECTOR_SIZE), NULL, NULL, &config, MI_NDMA_TIMING_SD_1 );
|
||||||
|
StartToRead( block, count );
|
||||||
|
if ( SDCARD_ErrStatus != SDMC_NORMAL )
|
||||||
|
{
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
u32 offset = 0; // in bytes
|
||||||
|
|
||||||
|
// OS_TPrintf("ReadNormal(0x%X, 0x%08X, 0x%X) is calling.\n", block, dest, count);
|
||||||
|
MI_NDmaRecvAsync_SetUp( DMA_RECV, (void*)SDIF_FI, dest, SECTOR_SIZE, NULL, NULL );
|
||||||
|
StartToRead( block, count );
|
||||||
|
if ( SDCARD_ErrStatus != SDMC_NORMAL )
|
||||||
|
{
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
while ( count * SECTOR_SIZE > offset )
|
||||||
|
{
|
||||||
|
WaitFifoFull();
|
||||||
|
if ( SDCARD_ErrStatus != SDMC_NORMAL )
|
||||||
|
{
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
// MI_NDMA_REG( DMA_RECV, MI_NDMA_REG_DAD_WOFFSET ) = (u32)dest + offset;
|
||||||
|
MIi_SetNDmaDest( DMA_RECV, (u8*)dest + offset );
|
||||||
|
MI_NDmaRestart( DMA_RECV );
|
||||||
|
offset += SECTOR_SIZE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
MI_WaitNDma( DMA_RECV );
|
||||||
|
#ifdef USE_SPECULATIVE_READ
|
||||||
|
currentSector += count;
|
||||||
|
#else
|
||||||
|
StopToRead();
|
||||||
|
#endif
|
||||||
|
return SDCARD_ErrStatus;
|
||||||
|
|
||||||
|
err:
|
||||||
|
MI_StopNDma( DMA_RECV );
|
||||||
|
#ifdef USE_SPECULATIVE_READ
|
||||||
|
currentSector = 0xFFFFFFFF;
|
||||||
|
#endif
|
||||||
|
StopToRead();
|
||||||
return SDCARD_ErrStatus;
|
return SDCARD_ErrStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -223,6 +345,11 @@ static u16 ReadAES(u32 block, void *dest, u16 count)
|
|||||||
|
|
||||||
// OS_TPrintf("ReadAES(0x%X, 0x%08X, 0x%X) is calling.\n", block, dest, count);
|
// OS_TPrintf("ReadAES(0x%X, 0x%08X, 0x%X) is calling.\n", block, dest, count);
|
||||||
MI_NDmaPipeAsync_SetUp( DMA_PIPE, (void*)SDIF_FI, (void*)REG_AES_IFIFO_ADDR, PIPE_SIZE, NULL, NULL );
|
MI_NDmaPipeAsync_SetUp( DMA_PIPE, (void*)SDIF_FI, (void*)REG_AES_IFIFO_ADDR, PIPE_SIZE, NULL, NULL );
|
||||||
|
StartToRead( block, count );
|
||||||
|
if ( SDCARD_ErrStatus != SDMC_NORMAL )
|
||||||
|
{
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
AESのセットアップ&出力DMA設定
|
AESのセットアップ&出力DMA設定
|
||||||
@ -236,11 +363,6 @@ static u16 ReadAES(u32 block, void *dest, u16 count)
|
|||||||
// update for next read
|
// update for next read
|
||||||
AESi_AddCounter( &aesCounter, (u32)(count * SECTOR_SIZE / AES_BLOCK_SIZE) );
|
AESi_AddCounter( &aesCounter, (u32)(count * SECTOR_SIZE / AES_BLOCK_SIZE) );
|
||||||
|
|
||||||
StartToRead( block, count );
|
|
||||||
if ( SDCARD_ErrStatus != SDMC_NORMAL )
|
|
||||||
{
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
while ( count * SECTOR_SIZE > offset )
|
while ( count * SECTOR_SIZE > offset )
|
||||||
{
|
{
|
||||||
@ -259,13 +381,20 @@ static u16 ReadAES(u32 block, void *dest, u16 count)
|
|||||||
offset += PIPE_SIZE;
|
offset += PIPE_SIZE;
|
||||||
}
|
}
|
||||||
MI_WaitNDma( DMA_PIPE );
|
MI_WaitNDma( DMA_PIPE );
|
||||||
|
#ifdef USE_SPECULATIVE_READ
|
||||||
|
currentSector += count;
|
||||||
|
#else
|
||||||
StopToRead();
|
StopToRead();
|
||||||
|
#endif
|
||||||
MI_WaitNDma( DMA_RECV );
|
MI_WaitNDma( DMA_RECV );
|
||||||
return SDCARD_ErrStatus;
|
return SDCARD_ErrStatus;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
MI_StopNDma( DMA_RECV );
|
MI_StopNDma( DMA_RECV );
|
||||||
MI_StopNDma( DMA_PIPE );
|
MI_StopNDma( DMA_PIPE );
|
||||||
|
#ifdef USE_SPECULATIVE_READ
|
||||||
|
currentSector = 0xFFFFFFFF;
|
||||||
|
#endif
|
||||||
StopToRead();
|
StopToRead();
|
||||||
AESi_Reset();
|
AESi_Reset();
|
||||||
return SDCARD_ErrStatus;
|
return SDCARD_ErrStatus;
|
||||||
@ -449,7 +578,7 @@ static BOOL sdmcRtfsAttachFirm( int driveno)
|
|||||||
BOOL FATFS_InitFIRM( void* nandContext )
|
BOOL FATFS_InitFIRM( void* nandContext )
|
||||||
{
|
{
|
||||||
/* RTFSライブラリを初期化 */
|
/* RTFSライブラリを初期化 */
|
||||||
if( !FATFSi_rtfs_init() )
|
if( !rtfs_init() )
|
||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -457,11 +586,16 @@ BOOL FATFS_InitFIRM( void* nandContext )
|
|||||||
/* NAND初期化パラメータの設定 */
|
/* NAND初期化パラメータの設定 */
|
||||||
SDNandContext = (SDPortContext*)nandContext;
|
SDNandContext = (SDPortContext*)nandContext;
|
||||||
|
|
||||||
|
#ifdef USE_SPECULATIVE_READ
|
||||||
|
currentSector = 0xFFFFFFFF;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* SDドライバ初期化 */
|
/* SDドライバ初期化 */
|
||||||
if ( FATFSi_sdmcInit( SDMC_NOUSE_DMA ) != SDMC_NORMAL )
|
if ( sdmcInit( SDMC_NOUSE_DMA ) != SDMC_NORMAL )
|
||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -504,3 +638,24 @@ BOOL FATFS_MountDriveFIRM( int driveno, FATFSMediaType media, int partition_no )
|
|||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: FATFS_UnmountDriveFIRM
|
||||||
|
|
||||||
|
Description: unmount specified partition
|
||||||
|
|
||||||
|
特殊なドライバの終了処理をします。
|
||||||
|
|
||||||
|
Arguments: driveno drive number "A:" is 0
|
||||||
|
|
||||||
|
Returns: None
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
BOOL FATFS_UnmountDriveFIRM( int driveno )
|
||||||
|
{
|
||||||
|
#ifdef USE_SPECULATIVE_READ
|
||||||
|
StopToRead();
|
||||||
|
currentSector = 0xFFFFFFFF;
|
||||||
|
#endif
|
||||||
|
return TRUE;
|
||||||
|
return rtfs_detach( driveno );
|
||||||
|
}
|
||||||
|
|||||||
@ -97,16 +97,16 @@ SDK_WEAK_SYMBOL asm void _start( void )
|
|||||||
// SVC mode
|
// SVC mode
|
||||||
mov r0, #HW_PSR_SVC_MODE
|
mov r0, #HW_PSR_SVC_MODE
|
||||||
msr cpsr_c, r0
|
msr cpsr_c, r0
|
||||||
ldr sp, =HW_PRV_WRAM_SVC_STACK_END
|
ldr sp, =HW_FIRM_SVC_STACK_END
|
||||||
|
|
||||||
// IRQ mode
|
// IRQ mode
|
||||||
mov r0, #HW_PSR_IRQ_MODE
|
mov r0, #HW_PSR_IRQ_MODE
|
||||||
msr cpsr_c, r0
|
msr cpsr_c, r0
|
||||||
ldr r0, =HW_PRV_WRAM_IRQ_STACK_END
|
ldr r0, =HW_FIRM_IRQ_STACK_END
|
||||||
mov sp, r0
|
mov sp, r0
|
||||||
|
|
||||||
// System mode
|
// System mode
|
||||||
ldr r1, =SDK_IRQ_STACKSIZE
|
ldr r1, =HW_FIRM_IRQ_STACK_SIZE
|
||||||
sub r1, r0, r1
|
sub r1, r0, r1
|
||||||
mov r0, #HW_PSR_SYS_MODE
|
mov r0, #HW_PSR_SYS_MODE
|
||||||
msr cpsr_csfx, r0
|
msr cpsr_csfx, r0
|
||||||
@ -345,8 +345,8 @@ INITi_ShelterStaticInitializer(u32* ptr)
|
|||||||
bxeq lr
|
bxeq lr
|
||||||
|
|
||||||
/* 退避場所先頭アドレスを計算 */
|
/* 退避場所先頭アドレスを計算 */
|
||||||
ldr r1, =HW_PRV_WRAM_IRQ_STACK_END
|
ldr r1, =HW_FIRM_IRQ_STACK_END
|
||||||
ldr r2, =SDK_IRQ_STACKSIZE
|
ldr r2, =HW_FIRM_IRQ_STACK_SIZE
|
||||||
sub r1, r1, r2
|
sub r1, r1, r2
|
||||||
add r1, r1, #4
|
add r1, r1, #4
|
||||||
|
|
||||||
@ -379,8 +379,8 @@ INITi_CallStaticInitializers(void)
|
|||||||
stmdb sp!, {lr}
|
stmdb sp!, {lr}
|
||||||
|
|
||||||
/* テーブル退避場所先頭アドレスを計算 */
|
/* テーブル退避場所先頭アドレスを計算 */
|
||||||
ldr r1, =HW_PRV_WRAM_IRQ_STACK_END
|
ldr r1, =HW_FIRM_IRQ_STACK_END
|
||||||
ldr r2, =SDK_IRQ_STACKSIZE
|
ldr r2, =HW_FIRM_IRQ_STACK_SIZE
|
||||||
sub r1, r1, r2
|
sub r1, r1, r2
|
||||||
add r1, r1, #4
|
add r1, r1, #4
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user