XMC7 설정
easyDSP 연결
easyDSP는 CM7 코어만 지원하며, CM0 코어는 지원하지 않습니다.
경우에 따라 하기와 같이 여러 케이스로 easyDSP 연결이 가능합니다.
케이스 1 : 하나의 CM7 코어를 가지는 MCU와 통신하는 경우입니다.
케이스 2 : 두개의 CM7 코어와 통신할 경우 각 코어별로 easyDSP를 연결할 수 있습니다.
케이스 3, 4와 달리 사용 조건 및 리소스 할당이 필요 없으며, 코어의 성능을 최적화할 수 있기에 추천하는 구성입니다.
케이스 3 : 두개의 CM7 코어와 통신할 경우 두 코어가 데이타캐시를 사용하지 않는다면 하나의 easyDSP를 사용하여 두 코어의 변수를 모니터링할 수 있습니다.
easyDSP는 CM7 코어 둘 중 어느 곳에도 연결할 수 있습니다.
케이스 4 : 두개의 CM7 코어와 통신할 경우 두 코어중 하나라도 데이타캐시를 사용한다면 코어간 IPC 통신을 사용하므로써 하나의 easyDSP를 사용할 수 있습니다.
easyDSP는 CM7 코어 둘 중 어느 곳에도 연결할 수 있습니다.
IPC 통신을 위한 리소스가 할당되어야 하며 부가적인 작업으로 인해 상대적으로 모니터링 속도 성능이 저하됩니다.
![]()
실질적인 회로 구성은 하기와 같습니다.
먼저 사용자 보드 환경에 맞춰 easyDSP와 MCU 사이 통신에 사용될 UART의 SCB 채널 및 핀을 선정합니다.
만약 easyDSP 제공하는 부트로더 (아래 부분 참조)를 사용하지 않는 경우에는, -BOOT와 -RESET은 연결할 필요가 없습니다.
케이스 2 경우, 두개의 easyDSP가 두개의 SCB에 연결되어야 합니다.![]()
Device Configurator 설정
easyDSP는 device configurator 기반 생성된 코드를 사용하여 SCB를 설정합니다.
하기에서는 device configurator 5.3기준으로 설명드립니다.
먼저 Peripherals 탭에서 easyDSP를 연결할 SCB를 선택한 후, 이름을 scb_ez1로 변경하고 UART 모드를 선택합니다.
scb_ez1은 단일 CM7 코어를 가지는 MCU에, 또는 두개의 CM7를 가지는 MCU의 CM7_0에 사용됩니다.
아래 화면은 SCB8을 사용하고 RX, TX핀을 각각 P12.0, P12.1을 선택한 경우의 화면입니다.
해당 SCB의 파라미터를 아래와 같이 설정합니다.
보드레이트는 사용자가 적절히 선정합니다. 단, easyDSP 프로젝트 설정값과 동일해야 합니다.
8 bit data, 1 stop bit, no parity bit의 데이타 규격을 사용하며, SCB 핀을 선정합니다.
API 모드는 Low Level를 사용하며, 인터럽트는 RX FIFO not Empty만을 사용합니다.
기타 부분은 하기 그림 참조 바랍니다.![]()
Peripheral-Clocks 탭에서 해당 SCB의 클럭을 설정합니다. 앞서 설정된 클럭 연결의 경우 하기를 참조하세요. 보드 레이트 등의 설정에 따라 파라미터 값이 달라질 수 있습니다.
![]()
Pins탭에서 RX, TX에 할당된 핀을 설정합니다.
먼저 싱글 코어거나 듀얼코어의 CM7_0일 경우 핀 이름을 EZ_RX1, EZ_TX1으로 설정하며, 듀얼코어의 CM7_1일 경우 EZ_RX2, EZ_TX2로 설정합니다.
그리고 Drive Mode를 설정합니다.![]()
![]()
케이스 2의 경우 CM7_1에 연결할 SCB를 하나 더 선택해야 하며, 이름을 scb_ez2로 설정하고, 나머지 사항은 scb_ez1과 동일하게 설정합니다.
마지막으로 파일을 저장합니다.
먼저 변수 모니터링을 위해 제공되는 소스파일 (easyXMC7.h, easyXMC7.c)을 사용자 프로젝트에 포함하시기 바랍니다.
easyDSP_init() 함수 호출
먼저 main.c 상단에 easyXMC7.h를 include하고, main 함수에서 각종 초기화가 진행된 이후, 적절한 위치에서 easyDSP_init() 함수를 호출합니다. 이로써, 변수 모니터링이 가능하게 됩니다.
easyDSP 제공 부트로더를 사용하는 경우 main 함수 최앞단에서 easyDSP_boot()를 호출합니다.
두개의 CM7 코어를 사용하는 프로젝트라면 각 코어 프로젝트의 main.c에 동일하게 적용합니다.![]()
easyDSP 제공 부트로더
플래시 프로그래밍을 위해 업체가 제공하는 다양한 방법이 있습니다 (예 : JTAG 디비거).1. 사용자 프로그램 안에 easyDSP가 제공하는 부트로더가 존재하는 구성이므로 MCU 플래시에 easyDSP 소스파일이 이미 프로그래밍되어 있어야 부트로더도 동작할 수 있습니다. 만약 플래시가 전부 지워져 있거나, easyDSP 소스파일이 플래시에 프로그래밍이 되어 있지 않다면, 플래시 프로그래밍이 지원되지 않으며 (즉, 부트로더 진입이 불가하며), 이 경우 디버거를 사용하여 플래시를 프로그래밍해야 합니다. 따라서 처음 한번은 반드시 디버거를 이용한 플래시 프로그래밍이 수행되야 합니다.
2. 만약 플래시 프로그래밍 중 오류가 발생하면 (예를 들어 먼저 플래시를 지운 후 프로그래밍에 오류가 발생) 부트로더는 더 이상 플래시내 존재하지 않아 사용이 불가하게 됩니다. 이 경우 앞 서 주의사항 1번처럼 디버거로 플래시 프로그램을 수행해야 합니다.
3. 플래시 억세스시 사용하는 함수 및 변수를 램에 위치시키기 위해, 일정 크기의 램용량을 소모합니다.
4. CM0 코어용 프로그램의 플래시 프로그래밍은 지원하지 않습니다. CM0 코어용 프로그램 변경시 디버거를 사용해서 플래시 프로그래밍해야 합니다.사용 준비 사항 :
1. 상기에서 언급했듯이, easyXMC7.h에서 EZ_USE_BOOTLOADER를 1로 선언하고, easyXMC7_boot.c 파일을 사용자 프로젝트에 포함하고, main 함수의 앞단에서 easyDSP_boot 함수를 호출합니다.
2. 매 컴파일마다 hex 파일 (인텔 형식) 이 생성되어 출력 파일과 동일한 폴더에 동일한 이름으로 위치하도록 IDE를 설정해주세요. Hex 파일은 플래시 프로그래밍할 때 사용됩니다.
3. 플래시 프로그래밍에 사용되는 함수 및 변수가 램에 위치하도록 소스 파일을 변경해야 합니다.3.1. cy_flash_srom.h 파일 마지막 부분 함수 선언부에서 Cy_Srom_CallApi(), Cy_Srom_GetResponseType(), Cy_Srom_ConvertRespToStatus() 함수 앞뒤로 CY_SECTION_RAMFUNC_BEGIN, CY_SECTION_RAMFUNC_END를 붙여서 해당 함수가 램에서 실행되도록 합니다.
3.2. cy_flash_srom.c 파일 앞부분 static 함수 선언부에서 Cy_Srom_Get_DataSize() 함수 앞뒤로 CY_SECTION_RAMFUNC_BEGIN, CY_SECTION_RAMFUNC_END를 붙여서 해당 함수가 램에서 실행되도록 합니다.
3.3. cy_ipc_drv.h 파일 중간 부분에서 Cy_IPC_Drv_SendMsg() 함수 앞뒤로 CY_SECTION_RAMFUNC_BEGIN, CY_SECTION_RAMFUNC_END를 붙여서 해당 함수가 램에서 실행되도록 합니다.
3.4. cy_device.h 파일에서 IPC_BASE_PTR 변수의 선언부에서 const를 삭제합니다.
3.5. cy_device.c 파일에서 IPC_BASE_PTR 변수 정의부에서 const를 삭제하여 해당 변수가 램에 위치하게 합니다.
3.6. 상기에서 램에 위치시킨 함수/변수의 실제 주소가 램에 할당되었는지를 map 파일을 통해 확인합니다.사용 방법 : 플래시 대화상자 사용법은 여기를 참조합니다.
기타
1. 각 케이스별로 easyDSP를 사용법을 종합하면 다음과 같습니다.
Case 2 :Case 1 :
설정항목
CM7
easyDSP 프로젝트 출력 파일 지정 easyXMC7.h 타켓 MCU 및 IRQ 번호 및 순위 지정
EZ_USE_BOOTLOADER 지정main.c easyDSP_init() 호출
설정 항목
CM7_0
CM7_1
easyDSP 프로젝트 CPU1, CPU2 출력 파일 모두 지정
CPU1 체크 박스 선택CPU1, CPU2 출력 파일 모두 지정
CPU2 체크 박스 선택easyXMC7.h 타켓 MCU 및 IRQ 번호 및 순위 지정
EZ_USE_IPC = 0
EZ_IS_CM7_0_CONNECTED_TO_EASYDSP = 1
EZ_IS_CM7_1_CONNECTED_TO_EASYDSP = 1
EZ_USE_BOOTLOADER 지정좌동
main.c easyDSP_init() 호출 좌동
Case 3 :
설정항목
CM7_n (n = 0 또는 1)
easyDSP 프로젝트 CPU1, CPU2 출력 파일 모두 지정
CPU1, CPU2 체크 박스 모두 선택easyXMC7.h 타켓 MCU 및 IRQ 번호 및 순위 지정
easyDSP가 CM7_0에 연결될 경우에는
EZ_IS_CM7_0_CONNECTED_TO_EASYDSP = 1
EZ_IS_CM7_1_CONNECTED_TO_EASYDSP = 0
easyDSP가 CM7_1에 연결될 경우에는
EZ_IS_CM7_0_CONNECTED_TO_EASYDSP = 0
EZ_IS_CM7_1_CONNECTED_TO_EASYDSP = 1
EZ_USE_IPC = 0
EZ_USE_BOOTLOADER 지정main.c easyDSP_init() 호출 Case 4 :
설정 항목
CM7_n (n = 0 또는 1)
CM7_m (m = 1 또는 0)
easyDSP 프로젝트 CPU1, CPU2 출력 파일 모두 지정
CPU1, CPU2 체크 박스 모두 선택프로젝트 생성하지 않음 easyXMC7.h 타켓 MCU 및 IRQ 번호 및 순위 지정
easyDSP가 CM7_0에 연결될 경우에는
EZ_IS_CM7_0_CONNECTED_TO_EASYDSP = 1
EZ_IS_CM7_1_CONNECTED_TO_EASYDSP = 0
easyDSP가 CM7_1에 연결될 경우에는
EZ_IS_CM7_0_CONNECTED_TO_EASYDSP = 0
EZ_IS_CM7_1_CONNECTED_TO_EASYDSP = 1
EZ_USE_IPC = 1
EZ_IPC_CHAN_CYPIPE_EP0 = 사용자 설정값
EZ_IPC_INTR_CYPIPE_EP0 = 사용자 설정값
EZ_IPC_CHAN_CYPIPE_EP1 = 사용자 설정값
EZ_IPC_INTR_CYPIPE_EP1 = 사용자 설정값
EZ_USE_BOOTLOADER 지정좌동 main.c easyDSP_init() 호출 좌동
2. 프로젝트 설정
프로젝트 세팅의 Basic 탭에서 Flash 뱅크 구성을 지정합니다. easyDSP는 플래시 뱅크 구성을 변경하지 않습니다. 여기서는 그 구성을 easyDSP에게 알려주는 역할입니다.
케이스 3 또는 4의 경우 각 코어의 출력 파일을 모두 지정해야 합니다. 또한 'Communication with easyDSP' 체크박스를 모두 선택합니다.![]()
3. 하나의 easyDSP가 두개의 코어를 모니터링할 경우 변수 이름 표기법
하나의 easyDSP가 두개의 CM7 코어와 통신할 때 (즉, 케이스 3 또는 4), 코어간 변수 이름을 구분하기 위해, CPU1(CM7_0) 프로그램 변수에는 "1:"을, CPU2(CM7_1) 프로그램 변수에는 "2:"를 기존 변수 이름 앞에 덧붙입니다. 즉, CPU1 프로그램 변수 이름이 "var1" 일 경우, easyDSP에서 "1:var1" 으로 표기되며, CPU2 프로그램 변수 이름이 "var2" 일 경우, easyDSP에서 "2:var2"로 표기됩니다.
4. MCU > Reload *.out 메뉴
easyDSP 제공 부트로더를 사용하지 않을 경우, MCU 플래시가 디버거 등으로 다시 프로그래밍될 때마다, 본 메뉴를 실행하여 재프로그래밍된 변수 정보를 업데이트해야 합니다.
easyDSP 제공 부트로더를 사용할 경우, 사용자 프로그램이 새로 컴파일되면 아래 메시지에서 Yes를 선택하므로써 재프로그래밍될 변수 정보를 업데이트하므로 본 메뉴를 사용하지 않습니다.