2013/09/30

SmartFusion (A2F500-FGG256) UART

Actel 홈페이지에서 Using UART with a SmartFusion cSoC - Libero SoC and SoftConsole Flow Tutorial의 내용임.

먼저 리베로SoC를 실행해서 프로젝트를 생성해보자.






































A2F500 256 BGA 확인하고 OK






















이렇게 만들어진다.


다음은 Configuring MSS Peripherals
A2F500_UART_MSS_0를 더블클릭해보자.






















새창이 뜬다.




















여기서 WATCHDOG은 Disable 해놓자. 활성화 시켜놓으면 계속 리셋된다.

Clock Management 박스를 더블클릭해서 클럭 설정을 하자.



































빨간색 박스 안에 설정만 바꾸면 된다. On-Chip RC Oscilator 100MHz 입력을 80MHz로 바꿔서 MCU에서 사용할 거임. OK 눌러주자.

File > Save 해주고 아래 그림과 같이 Update Instance(s) with Lastest Component... 실행.
















다음은 Design > Configure Firmware












HAL_0의 Generate 체크박스를 클릭하면 다운로드 어쩌네하면서 드라이버를 주루룩 다운로드 한다.















File > Save에서 DESIGN_FIRMWARE 저장해주고 SmartDesign > Generate Component 를 실행한다.

실행이 완료되면 프로젝트 폴더내에 SoftConsole 폴더가 새로 생성된다.


Design Flow 윈도우 제일 아래 부분에 Develop Firware 항목의 Write Application Code를
더블 클릭하면 생성된 소프트콘솔 프로젝트가 실행된다.


































이렇게 뜬다.






























여기서 프로그램 짜면 되는거지...
튜터리얼에 보면 친절하게도 예제 프로그램도 있다. 고대로 함 넣어보자.


#include "mss_uart.h"
#define Microsemi_logo \
"\n\r \
** ** ******* ****** ***** **** ***** ****** ** ** ******* \n\r \
* * * * * * * * * * * * * * * * * \n\r \
* * * * * * ***** * * **** ****** * * * * * \n\r \
* * * * * * * * * * * * * * * \n\r \
* * ******* ****** * * **** ***** ****** * * ******* "

/* Main function */
int main()
{
const uint8_t greeting[] = "\n\rWelcome to SmartFusion "
"- customizable system-on-chip (cSoC)";

/* Initialize and configure UART0. */
MSS_UART_init
(
&g_mss_uart0,
MSS_UART_57600_BAUD,
MSS_UART_DATA_8_BITS | MSS_UART_NO_PARITY | MSS_UART_ONE_STOP_BIT
);

/* Send the Microsemi Logo over the UART_0 */
MSS_UART_polled_tx_string( &g_mss_uart0, (const uint8_t *)Microsemi_logo);

/* Send greeting message over the UART_0 */
MSS_UART_polled_tx( &g_mss_uart0, greeting, sizeof(greeting) );

while(1)
{
}
return 0;
}






















Project > Build Configurations > Set Active > 2 Release 로 변경



















Project > Properties를 선택해라. 새 창이 뜨는데 거기서 C/C++ Build 항목의 Setting를 선택하면 GNU C Linker 설정을 할 수 있다. Miscellaneous를 선택해서 Linker flags를 변경하자.
























production-execute-in-place.ld로 바꿔주면 된다.
Project > Build All 로 컴파일을 해보자.
혹시 ld 파일을 찾을 수 없다고 에러가 뜨면, 상대 경로를 절대 경로로 바꿔주면 된다.

.hex 파일이 생성되었으면 이젠 SmartFusion에 다운로드 해보자.
다시 리베로SoC로 돌아가자.

ENVM 블럭을 더블클릭하면 설정창이 뜬다.




















Available client types에서 Data Storage를 선택하고 Add to System...

























아래와 같이 적당히 이름 정해주고, hex 파일 위치 지정하고, Size of word를 32 bits로 변경한다. 그리고 OK






































SmartDesign > Generate Component 실행해서 ENVM 업데이트하고
Design > Generate Programming Data 실행


그리고 Program Device...인데....

왜 자꾸 Run Failed가 뜨지...