RP2040 DMA 해킹으로 또 다른 'CPU 코어' 생성

RP2040 DMA 해킹으로 또 다른 'CPU 코어' 생성

소스 노드 : 1908807

코넬 대학교의 [Bruce Land]는 많은 Hackaday 독자들에게 친숙한 이름일 것입니다. 사이트에서 'ECE4760'을 검색하면 임베디드 프로그래밍에 관한 많은 흥미로운 주제가 나올 것입니다. 매년 [Bruce]는 더 많은 학생들의 작품을 공개하여 매우 기쁘게 생각합니다. 이 RP2040 기반 프로젝트는 이전 작업보다 조금 더 추상적이며 이전 해킹을 활용하는 또 다른 구현을 보여줍니다. 또 다른 CPU 코어로서의 RP2040의 DMA 하드웨어. RP2040 DMA 하위 시스템의 주요 초점은 CPU 개입을 최소화하면서 메모리 공간 간에 데이터를 이동하는 것이지만 DMA 제어 블록의 동작은 상당히 복잡합니다. 이를 통해 Turing-complete CPU를 DMA 하드웨어와 메모리만 사용하여 구현할 수 있습니다.

이 방법은 0개의 DMA 채널 중 1개를 연결하며 'Arduino'와 유사한 성능을 갖는 것으로 추정되지만 [Bruce]는 다양한 모델 중 어느 것이 될 수 있는지 지정하지 않습니다. 하지만 어쨌든 누가 신경쓰나요? CPU 프로그래밍은 하드웨어의 동작을 활용하는 문제입니다. 하드웨어의 동작은 모두 DMA에 의해 매핑되고 대상 지정될 수 있습니다. 예를 들어, CPU는 DMA를 사용하여 주변 장치 주소 공간에 값을 기록함으로써 GPIO 핀을 흔들 수 있습니다. 기본적인 흐름은 위의 이미지에서 보실 수 있습니다. DMAXNUMX은 DMAXNUMX을 DMA 제어 블록의 배열로 가리키는 프로그램 카운터로 사용됩니다. 일부 CPU 모델의 'opcode' 중 하나입니다. DMA0은 제어 블록을 읽고 이에 따라 자체 구성하는 DMA1에 연결됩니다(제어권을 넘겨줍니다). DMA1은 프로그래밍된 모든 데이터 이동을 수행하고 DMA2에 연결되며, DMA0는 다시 DMA1에 의해 실행될 목록의 다음 블록을 가리키도록 DMAXNUMX 프로그램 카운터를 다시 프로그래밍합니다.

또한 DMA1을 사용하여 후속 DMA1 제어 블록(자체 수정 코드가 발생함)을 수정함으로써 시스템은 추가, 논리 연산 및 조건 분기와 같은 보다 유용한 연산을 구현할 수 있습니다. 전송으로 인한 작업 특정 섀도우 레지스터에서는 원자 설정, 재설정 및 XOR 작업을 활성화합니다. 모든 영리한 것들과 참여한 훌륭한 학생 프로젝트입니다. [브루스] 종이를 가리킨다 (Pi2 사용)에서 WOOT 2015 워크숍 이 전체 과정에 대한 더 나은 설명을 제공할 수 있습니다.

[Bruce Land]가 누구인지 여전히 궁금하고 이러한 주제 중 일부에 대한 입문서를 원한다면, 우리의 이전 범위를 확인하십시오. 이 이론적인 내용이 약간 무겁다면(즉, 지루한 경우) 일부 프로젝트는 다음과 같이 좀 더 실용적인 측면을 갖고 있습니다. 색상 분류 스키틀즈의 중요한 작업.

썸네일 이미지: Thomas Glau, CC BY-SA 4.0.

타임 스탬프 :

더보기 해킹 하루