유저매뉴얼의 Reset Sources 테이블
첫번째 열이 Reset Source 목록이고 첫번째 행이 각 Reset이 발생했을 때 초기화되는 여부를 표시한다. Yes인 것은 해당 회로가 리셋 된다는 뜻이고, - 는 해당회로 기존 상태로 남는다는 뜻이며, Hi-z는 하이 임피던스 상태라는 뜻이다.
Power-On Reset (POR)
POR 회로는 칩에 전원이 인가되고 안정된 상태에 이르기까지 칩을 계속 리셋 상태로 묶어두는 회로로, GPIO 핀들의 글리치를 억제하고, 칩이 깨끗하게 시동 될 수 있게한다.
POR이 발생하면 칩의 모든 회로는 리셋상태가 되고, IO핀은 Hi-Z 상태가 되며, /XRS 핀은 Low 신호를 출력하게 된다. 이때 /XRS 핀의 출력 신호는 칩과 연결된 다른 IC 소자들을 리셋 시키기 위해서 사용될 수 있고, 대부분의 경우에서 충분한 리셋 시간을 제공한다. 하지만 리셋을 위해 더 긴 펄스를 필요로 하는 IC가 있는 경우 외부 회로가 구성될 필요가 있다.
External Reset (/XRSn)
실제 리셋 핀(/XRS)을 통해 외부에서 입력되는 신호로 발생하는 리셋을 말한다.
오픈 드레인 /XRS 핀은 주변의 다른 소자들을 리셋하기 위하기 위한 용도의 출력 핀으로 사용될 수 있고, 입력 핀으로 외부 신호를 입력 받아 칩을 리셋 할 수도 있다.
Simulate External Reset (SIMRESET.XRSn)
소프트웨어로 External Reset을 시뮬레이션하는 방식이다. CPU1 소프트웨어에서 SIMRESET 레지스터의 XRSn 비트를 1로 설정하면 XRS 핀이 토글되어 칩 전체가 리셋된다.
Watchdog Reset (/WDRS)
와치독 리셋은 와치독 타이머가 풀카운팅 됐을 때 발생하는 리셋이다.
CPU1과 CPU2는 각각 개별적으로 Watchdog 회로를 가지고 있는데 CPU1에서 발생한 Watchdog Reset 은 칩 전체를 리셋시키지만, CPU2에서 발생한 Watchdog Reset은 CPU2 Core와 CPU2 Peripheral 만 리셋하고 CPU1의 NMI를 트리거한다.
NMI Watchdog Reset (/NMIWDRS)
마찬가지로 CPU1과 CPU2는 각각 시스템의 하드웨어 에러를 감지하기 위해 개별적으로 NMI(Non-maskable interrupt) 모듈을 가지고 있고, 각 NMI 모듈이 가진 watchdog timer는 사용자가 지정한 시간 내에 CPU가 오류에 대응하지 않으면 리셋을 트리거한다.
CPU1에서 발생한 NMI Watchdog Reset 은 칩 전체를 리셋시키지만, CPU2에서 발생한 NMI Watchdog Reset은 CPU2 Core와 CPU2 Peripheral 만 리셋하고 CPU1의 NMI를 트리거한다.
Debugger Reset (/SYSRS)
TI의 IDE인 CCS 툴바에서 Reset버튼을 눌러 디버거에서 발생시키는 리셋을 말한다.
/SYSRS는 CPU1과 CPU2 각각 별도로 수행할 수 있으며 CPU1에 발생하는 /SYSRS은 JTAG debug logic Reset과 /XRS 출력을 제외한 모든 회로가 리셋되는데 반해, CPU2에서 발생하는 /SYSRS은 자기자신의 CPU2 Core와 CPU2 Peripheral 만 리셋된다.
Secure Code Copy Reset (/SCCRESET)
각 CPU는 플래시 메모리의 특정 영역에 대한 읽기 접근을 차단할 수 있는 DCSM(dual-zone code security module)라는 보안 모듈이 존재하는데, DCSM이 활성화 된 상태에서 올바르지 않은 접근이 감지된 경우 DCSM은 리셋을 발생시킨다.
이러한 보안 리셋은 CPU1와 CPU2에 각각 개별적으로 발생수 있고, 각각 CPU1./SYSRS와 CPU2./SYSRS 유사한 레벨로 칩을 리셋 시키지만, 잠재적인 공격자에 대한 접근을 거부하기 위해서 JTAG Debug Logic 또한 리셋 시킨다.
Hardware BIST Reset (/HWBISTRS)
각 CPU는 셀프 테스트 할 수 있는 HWBIST(Hardware Built-In Self Test) 모듈을 내장하고 있는데, 해당 기능는 CPU를 테스트 한 후 원래의 상태로 돌아가기 위해서 리셋을 발생시킨다. 이 리셋은 오직 코어만 리셋시키고 나머지는 이전에 설정된 상태를 유지한다. HWBIST 기능은 특별한 boot ROM 플로우의 일부분으로 보통의 경우 직접적으로 사용하지 않는다.
Test Reset (/TRST)
JTAG 로직은 자기 자신의 리셋을 위한 /TRST 핀을 가지고 있는데 주변 시스템을 리셋하는 데에도 사용될 수 있다.
Reset Cause Register (RESC)
RESC 레지스터를 확인하면 지난 리셋의 원인이 무엇인지 확인할 수 있다. 그리고 그 값은 외부리셋(POR, XRSn) 또는 소프트웨어로 clear 되기 전까지는 multiple reset동안 유지된다.
driverlib로도 함수가 제공이되는데 POR이나 XRSn 리셋인 경우 RESC 레지스터가 초기화되서 아예 0이 되니까 boot ROM의 Status값을 확인해서 POR 또는 XRSn 비트만 켜주는 것 같다.
static inline uint32_t
SysCtl_getResetCause(void)
{
uint32_t resetCauses;
//
// Read CPU reset register
//
resetCauses = HWREG(CPUSYS_BASE + SYSCTL_O_RESC) &
((uint32_t)SYSCTL_RESC_POR | (uint32_t)SYSCTL_RESC_XRSN |
(uint32_t)SYSCTL_RESC_WDRSN |
(uint32_t)SYSCTL_RESC_NMIWDRSN |
(uint32_t)SYSCTL_RESC_SCCRESETN
| (uint32_t)SYSCTL_RESC_HWBISTN |
(uint32_t)SYSCTL_RESC_ECAT_RESET_OUT |
(uint32_t)SYSCTL_RESC_SIMRESET_CPU1RSN |
(uint32_t)SYSCTL_RESC_SIMRESET_XRSN |
(uint32_t)SYSCTL_RESC_XRSN_PIN_STATUS |
(uint32_t)SYSCTL_RESC_TRSTN_PIN_STATUS
);
//
// Set POR and XRS Causes from boot ROM Status
//
if((HWREG(SYSCTL_BOOT_ROM_STATUS) & (uint32_t)SYSCTL_BOOT_ROM_POR) ==
(uint32_t)SYSCTL_BOOT_ROM_POR)
{
resetCauses |= SYSCTL_RESC_POR;
}
if((HWREG(SYSCTL_BOOT_ROM_STATUS) & (uint32_t)SYSCTL_BOOT_ROM_XRS) ==
(uint32_t)SYSCTL_BOOT_ROM_XRS)
{
resetCauses |= SYSCTL_RESC_XRSN;
}
//
// Return the reset reasons.
//
return(resetCauses);
}
static inline void
SysCtl_clearResetCause(uint32_t rstCauses)
{
//
// Clear the given reset reasons.
//
HWREG(CPUSYS_BASE + SYSCTL_O_RESC) = rstCauses;
}
'임베디드 개발 > TMS320F2838x (C28x)' 카테고리의 다른 글
UniFlash 사용 방법 (0) | 2023.09.15 |
---|---|
TMS320F28388D ] 부트 과정 (0) | 2023.08.16 |
TMS320F28388D ] SPI Clocking Schemes / CPOL, CPHA 설정 (0) | 2023.08.14 |
TMS320F28388D ] eCAP으로 ePWM 신호 Period와 Duty Cycle 측정 (7) | 2023.08.14 |
TMS320F28388D ] ECAP (0) | 2023.08.14 |