'[Microchip]/PIC32'에 해당되는 글 19건

  1. 2010.11.27 [PIC32 - SM EVM] UART 테스트
  2. 2010.11.26 [PIC32-SM EMV] Timer테스트 - 1초 만들기 (1)
  3. 2010.11.25 PIC32 속도 측정
  4. 2010.11.25 PIC32 클럭 시스템 (1)
  5. 2010.11.25 [PIC32-SM EVM] 관련 자료
[Microchip]/PIC322010. 11. 27. 21:30

[PIC32 - SM EVM] UART 테스트

[PIC32 - SM EVM] UART 테스트

PIC32MX4에는 2개의 UART Port(RD2, RD3, RF4, RF5)가 있다.



보레이트설정
U1BRG레지스터에 계산값을 설정하면 된다.



PIC24와 레지스터 및 구조가 거의 비슷하다. Seial.c에 있는 U0_GetByte(), U0_PutByte()를 수정해 주면 된다.
unsigned char U0_GetByte(void)
{
    unsigned char read_data;

    read_data = U1RXREG;
    U1STAbits.OERR = 0;
 
    return (read_data); 
}

void U0_PutByte(unsigned char Data)
{
    while(U1STAbits.UTXBF == 1);
    U1TXREG = Data;
}



PIC32 UART테스트 예제코드
main()
{
 unsigned int cnt = 0; 
 SystemInit();

 Led1Init();
 Led2Init();

 U0_Init(BAUD_115200);
 U0_PutStr("PIC32 UART Test\r\n");

    while( 1)
    {
        Led1Toggle();
    
        U0_printf("Cnt=%d\r\n", cnt++);
        Delay(300);
   }
Posted by nexp
TAG PIC32

댓글을 달아 주세요

[Microchip]/PIC322010. 11. 26. 23:30

[PIC32-SM EMV] Timer테스트 - 1초 만들기

[PIC32-SM EMV] Timer테스트 - 1초 만들기


PIC32 타이머 구조
PIC32는 총 5개의 타이머가 있고 타이머 1은 16비트 이고, 타이머 2~5는 32비트로 설정 가능하다.



C32컴파일러를 이용하면 페리 관련 함수를 제공하기 때문에 설정하기는 상당히 편하다. 속도가 문제가 되지 않는 초기화 코드는 제공함수를 이용하는것이 좋을것 같다.
TMR1 = 0;
T1CON = 0x8030; // or TMR1bits.ON = 1; TMR1bits.TCKPS=3;
PR1 = 0xFFFF;



#include <PLIB.H>
WriteTimer1( 0);
OpenTimer1( T1_ON | T1_PS_1_256, 0xFFFF);


PIC32 타이머 테스트 예제코드
1ms주기로 인터럽트 수행되고 1초가 되면(1000번 카운트 되면) LED가 점등하는 예제
//1ms 타이머 인터럽트 핸들러
void __ISR(_TIMER_1_VECTOR,ipl3) _t1(void)
{
 mT1ClearIntFlag();

 gTimeTick1_1ms++;
  Led2Toggle();


main()
{
 unsigned int cnt = 0; 
 SystemInit();

 Led1Init();Led1On();
 Led2Init();Led2Off();

 U0_Init(BAUD_115200);
 U0_Printf("PIC32 Timer Test\r\n");

 //Timer1 초기화
 Timer1Init();

    while( 1)
    {
  if(gTimeTick1_1ms>1000)
  {
   gTimeTick1_1ms = 0;
   
   //1초 주기로 LED점등
   Led1Toggle();
   
   U0_Printf("cnt=%d\r\n", cnt++);
  }
 } // main loop
} // main
Posted by nexp

댓글을 달아 주세요

  1. 비더탑

    관리자의 승인을 기다리고 있는 댓글입니다

    2013.10.15 18:09 [ ADDR : EDIT/ DEL : REPLY ]

[Microchip]/PIC322010. 11. 25. 23:30

PIC32 속도 측정

PIC32 속도 측정


최대 PIC32는 80Mhz에 0 Waite Flash이다. 물론 코어 속어클럭과 페리 클럭은 분리되어 있고 페리 클럭은 훨신더 느리지만 다른 MCU에 비하면 상당히 빠른 결과가 나왔다. 다른 MCU속도 측정 결과 참고.

우선 기본적인 IO속도 측정을위해 IO토글하는 코드로 테스트 해보자.
8Mhz 클럭을 PLL로 80Mhz로 설정하고 테스트 하였다.
#pragma config FNOSC    = PRIPLL        // Oscillator Selection
#pragma config FPLLIDIV = DIV_2         // PLL Input Divider (PIC32 Starter Kit: use divide by 2 only)
#pragma config FPLLMUL  = MUL_20        // PLL Multiplier
#pragma config FPLLODIV = DIV_1         // PLL Output Divider
#pragma config FPBDIV   = DIV_1         // Peripheral Clock divisor
:

main()
{
  SystemInit();

   TRISB = 0;

    while( 1)
    {
       LATB ^= 0xFF;
    } // main loop
}



코드 효율을 보기위해 Disasembly Listing를  Open한다.






옵티마이즈 옵션을 설정한다.



Os 일때  6.6Mhz 출력된다. 40Mhz dsPIC보다 조금 빠르다.

옵티마이즈를 O3으로 바꿔보자.  8Mhz 나온다. 상당히 빠르다.
18:                    LATB ^= 0xFF;
9D000058  8C6B6060   lw          t3,24672(v1)
9D00005C  396A00FF   xori        t2,t3,0xff
9D000060  AC6A6060   sw          t2,24672(v1)
9D000064  8C6B6060   lw          t3,24672(v1)
9D000068  396A00FF   xori        t2,t3,0xff
9D00006C  AC6A6060   sw          t2,24672(v1


코드를 수정해 Port On/Off 만 해보자
Os 일때 20Mhz 가 나온다.
19:                    LATB=0;
9D00005C  AC406060   sw          zero,24672(v0)
20:                    LATB=1;
9D000060  AC436060   sw          v1,24672(v0)


O3일 때 40Mhz 나온다. 멋지다! 이정도 속도면 딜레이를 주어야 할 상황이다.
19:                    LATB=0;
9D00005C  AC406060   sw          zero,24672(v0)
9D000064  AC406060   sw          zero,24672(v0)
20:                    LATB=1;
9D000060  AC436060   sw          v1,24672(v0)
9D000068  AC436060   sw          v1,24672(v0)


저렴한 MCU급에서 이정도 속도는 지금것 못본것같다. 저렴한 가격에 이정도면 쓰일곳이 많을것 같다.

Posted by nexp

댓글을 달아 주세요

[Microchip]/PIC322010. 11. 25. 23:00

PIC32 클럭 시스템

PIC32 클럭 시스템

PIC32클럭은 아래 3가지 클럭으로 나누어진다.
 - SYSCLK(System Clock) :  CPU에 사용(혹은 특별 페리)
 - PBCLK(Peripheral Bus Clock) : 대부분으 페리에 사용
 - USBCLK(USB Clock) : USB용 클럭




클럭
최대 80Mhz로 동작 가능하고, Flash Access를 0 Wait로 구동해서  1.56 DMIPS/MHz (Dhrystone 2.1)까지 나온다고 한다.


소모전류
4Mhz -> 11mA
72Mhz -> 64mA
Posted by nexp

댓글을 달아 주세요

  1. 비더탑

    관리자의 승인을 기다리고 있는 댓글입니다

    2013.10.15 16:57 [ ADDR : EDIT/ DEL : REPLY ]

[Microchip]/PIC322010. 11. 25. 09:00

[PIC32-SM EVM] 관련 자료

[PIC32-SM EVM] 관련 자료




PIC32 회로도








PIC32MX44 핀맵



USB Host 테스트용 PIC32-SM EVM Board
Posted by nexp
TAG PIC32

댓글을 달아 주세요