MCU 레지스터의 논리적으로 관련된 비트 필드가 종종 별도의 위치에있는 이유는 무엇입니까?


9

이 질문에 이미 답변이 되었더라도이 페이지 나 더 넓은 인터넷에서 답변을 찾지 못했습니다.

저수준 프로그래밍에 대한 지식이 풍부한 숙련 된 개발자이지만 임베디드 개발에 비교적 익숙하지 않습니다. 저는 STM32F746ZG MCU가 장착 된 ST-NUCLEO144 보드를 사용하여 임베디드 시스템 개발을 가르치고 있습니다. 나에게 명백하지 않은 한 가지 질문은 레지스터의 논리적으로 관련된 비트 필드가 다른 위치에있을 수 있다는 것입니다.

한 가지 예는 USART_CR1STM32746ZG 의 레지스터입니다. M0M1비트 필드들은 함께 USART TX / RX 단어 길이의 결합 된 2 비트의 값을 제어하는 0b00지정 8 비트, 0b01즉 제외한 지정 9 비트 등이 모두 매우 간단를 M0비트 12에 있고, M1비트에있을 28 ... 왜 그렇습니까?

이전에 예약 된 공간에 새로운 기능이 삽입 된 것과 같은 레거시 디자인상의 이유 때문입니까? 칩 디자인과 관련하여 내가 고려하지 않은 이유입니까, 아니면 내가 보지 못하는 더 큰 목적이 있습니까?

분명히 이것은 비트 마스킹으로 극복하기에는 사소한 것이지만, 나는 단지 궁금합니다.


1
UART의 경우 특히 오래된 기술이므로 거의 항상 이전 버전과의 호환성이 있습니다. UART 레지스터 비트 필드가 종종 이름 공간 충돌을 일으키는 크 래피 이름을 갖는 동일한 이유입니다.
룬딘

답변:


13

이전에 예약 된 공간에 새로운 기능이 삽입 된 것과 같은 레거시 디자인상의 이유 때문입니까?

이 특별한 경우 (그리고 내가 본 것과 비슷한 경우) 예, 이전 장치와의 역 호환성을 유지하고 이전 장치에 대해 이미 작성된 (아마도 잘 테스트되고 인증 된 / 인증 된) 코드에 필요한 변경 사항을 최소화하기 위해 수행되었습니다 . 따라서, 원래의 레지스터 비트에 인접한 비트가 이미 사용 된 경우, 새로운 특징 및 기능 (제어 및 구성을 위해 새로운 레지스터 비트가 필요함)은 연속되지 않은 비트를 사용해야합니다.

예를 들어 다음은 USART_CR1이전 STM32F1xx 제품군 의 레지스터입니다.


STM32F1xx 레지스터 USART_CR1 비트 사용

그림 1. STM32F10xxx USART_CR1 레지스터 사용법

이미지 소스 : STM32F10xxx 제품군 레퍼런스 매뉴얼 RM0008, 섹션 27.6.4


이전 USART (단어 길이가 2 개인 옵션) M는 두 옵션 사이에서 USART 워드 길이를 구성하는 데 1 비트 만 필요 하며 이는 비트 12입니다. 비트 11과 13도 어떻게 사용되므로 향후 "확장"에 사용할 수 없습니다. .

만약 상기 된 바와 같이, 새로운 STM32F7 (그리고, 예컨대,도 STM32F4)에 USART는 이제 3 워드 길이 옵션 (7, 8, 9 비트)을 갖는 등 다른 구성 비트가 필요 - 12 인 비트 M0와, M1현재 비트 28 (위에서 볼 수 있듯이 STM32F1 레지스터 맵에서 이전에 예약되었습니다).


STM32F74xxx 레지스터 USART_CR1 비트 사용

그림 2. STM32F74xxx USART_CR1 레지스터 사용법

이미지 소스 : STM32F75xxx 및 STM32F74xxx 제품군 참조 매뉴얼 RM0385, 섹션 31.8.1


그들은 M1이미 다른 기능에 사용 된 레지스터 비트를 이동하지 않고 새로운 비트를 레지스터 비트 11 또는 13에 넣을 수 없었 으므로 기존 코드 (예 : STM32F1)와의 호환성을 제거했습니다.

따라서 이전 버전과의 호환성을 유지하려고 시도하여 예기치 않은 곳에 새로운 레지스터 비트가 추가되었습니다.

8250에서 16550까지 독립형 UART에 대한 레지스터 매핑을 유지 관리하는 것은 레지스터 맵의 다른 곳에 새 레지스터를 추가 한 또 다른 예입니다.


1
이것을 지적하는 데 시간을내어 주셔서 대단히 감사합니다. 아마도 내가 구하기 전에 이전 F 가족 참조 자료를 확인했을 것입니다. 나는 그 이야기에 더 많은 것이있을 것이라고 생각했다.
ajxs

1
@ajxs-천만에요. 나는 경험으로 만 말할 수 있습니다 (구식 UARTS는 또 다른 좋은 예입니다). 다른 사람이 다른 관련 경험을 가질 가능성은 항상있을 수 있으며, 질문에 이미 답변이있는 경우 답변을 작성하는 데 시간을 허비 할 수도 있습니다. 그래서 당신은 항상 내 대답을 "수락"할 수 있고, 다른 사람이 다른 관점에서 대답 할 수 있도록 하루를 기다릴 수 있습니다. 그렇지 않다면, 당신은 항상 나의 것을 다시 받아 들일 수 있습니다 :-) 나는 단지 당신이 다른 잠재적 인 답변 관점을 잃기를 원하지 않습니다.
SamGibson

2
그것은 합리적으로 보인다, 나는 당신의 충고를 취할 것이다! 제안을 할 정도로 정중 한 감사합니다. 내일까지 더 나은 답변을 얻지 못하면 나는 당신의 것을 받아 들일 것입니다. 다시 감사합니다.
ajxs

5

당신은 맞습니다

".. 새 기능과 같은 레거시 디자인 이유로 이전에 예약 된 공간에 삽입되었습니다."

내가 아는 한, 비트 위치 자체는 대부분의 경우 디자인에 거의 영향을 미치지 않습니다 (칩 구현에서 의미합니다). 디자이너는 일반적으로 사용 가능한 것을 활용하려고합니다. 너비를 확장하려고 할 때와 같은 경우도 있습니다.

그러나 비트 위치가 의도적으로 멀리 떨어져있는 경우도 있습니다. 특히 중요하고 의도하지 않은 쓰기 (잘못된 위치 / 마스크로 인해 또는 보안을 위해 스크램블링 됨)에 의해 수정되지 않는 비트의 경우 시스템이 원하지 않는 상태가 될 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.