Thông báo

Collapse
No announcement yet.

C Programming for ARM7 tutorial???

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • C Programming for ARM7 tutorial???

    Hiện tại em đang làm việc (bắt đầu) với đồng chí AT91SAM7S256 trên kit AT91SAM7S256 EV mua ở PNlab
    em đang dùng complier là Keil C,ban đầu bị choáng với cái header (dài hơn 2000 câu lệnh(cả comment)) và Library của nó(2500 câu)
    tự hỏi ...khi nào thì dùng cái gì?như thế nào?cần những cái gì?....
    Nói chung là stuck rất nhiều,cái democode kèm theo và trong phần sample thì lại quá ít,trên mạng tìm không thấy,tutorial đa phần bằng viết cho Assembly,có vẻ như bác Keil support không được tốt thì phải các bác ạ,vào trang chủ tìm bở hơi tai chẳng có cái gì hữu ích cả...
    Cũng thấy có bác Tây hỏi về vấn đề tương tự nhưng cũng không đâu vào đâu,có 1 quyển sách hay nhưng not free....hơi oải
    Hỏi bác Google mãi không được đành nhờ các bác vậy,ai có kn về lập trình C trên Keil cho ARM post lên mọi người cùng tham khảo góp ý nhé!
    Cảm ơn các bác nhìu!
    Em có search được 1 vài thứ
    1 ví dụ
    http://www.triplespark.net/elec/pdev/arm/at91sam7.html
    Application note
    http://www.atmel.com/dyn/products/ap...?family_id=605
    Forum portal
    http://www.at91.com
    ARM Wiki
    http://www.open-research.org.uk/ARMuC/HomePage.html

  • #2
    mình nghĩ bạn hoàn toàn có thể viết lại các file trên tùy thuộc vào nhu cầu của bạn.
    bạn cũng nên biết một chút về tập lệnh của nó bởi vì các file startup bắt buộc phải viết bằng hợp ngữ. Bạn chỉ dùng được C khi đã có stack. hợp ngữ sẽ giúp bạn thiết lập các vùng nhớ, địa chỉ interupt, stack v.v... Môt số lệnh bắt buộc phải dùng hợp ngữ ko thể dùng được C.

    Chi tiết bạn nên dọc quyển này:

    http://ifile.it/6b4trv/1558608745.rar

    trong đấy có link đến chõ down example code nữa, sách có phần tối ưu code cho chip arm rất hay và còn nhiều phần khác nữa.

    chúc vui.

    Comment


    • #3
      cảm ơn bác cation_h em đang down về,nhưng ifile.it có vẻ down vất vả quả bác ạ.

      Comment


      • #4
        mình cũng đang nghiên cứu đồ án về SAM7 nhưng mà không tìm được tài liệu..

        bạn nào giúp mình với

        Comment


        • #5
          mình nghĩ là CPU nào ko quá quan trọng
          cùng 1 dòng thì tập lệnh sẽ như nhau: ví dụ cùng arm v4 (tương dương ARM7TDMI),v5, v5,v6 ...
          nếu bạn Viết C thì gần như không phải quan tâm nhiều đến version.
          Nếu bạn có tools rồi thì bạn xem trong programmer reference của nó sẽ có phần chỉ dẫn biên dịch và linker.
          Do arm chỉ là IP core. Các hãng khác nhau sẽ có các module riêng của người ta -> tốt nhất là xem datasheet và các tài liệu kèm theo cùng với board.
          Bạn muốn đọc về kiến trúc, tập lệnh, tối ưu code C cho arm, một số chương trình cấp cao hơn thì xin mời đọc quyển sách mình đã post ở trên.
          chúc vui.

          Comment


          • #6
            oh
            tìm mãi mới thấy thứ mình cần
            thanks các pác

            Comment


            • #7
              @cation_h

              mình nghĩ người mới học ảm nên sử dụng các complier có support sẵn;làm hộ mình nhiều thứ (như startup code;linker;makefile...) để có thời gia ma biết ARM nó làm ăn ra sao chứ mới vô nhào vào viết mấy cái kia thi mất thời gian lắm!KHi đã có 1 lượng kiến thức nhất định về ARM thì bạn mới sử dụng Gcc

              Comment


              • #8
                tự làm thì lại biết được nhiều hơn và hiểu hơn chứ sao đang học cơ mà.
                chưa biết làm thế nào thì lại google hoặc đọc document của GCC. Nó làm ra thì nó cũng viết tài liệu hướng dẫn hết chứ có phải ko viết đâu.
                thêm nữa đọc tài liệu học TA luôn

                chúc vui.

                Comment


                • #9
                  may pac giai thĩ gium em cai Keil Review voi C arm coi.Em dang xai Keil Review de tap viet nhung bi loi :
                  #include < stdio.h>
                  em goi lun: printf("....");
                  no bao loi em hoai cac pac a?? help me

                  Comment


                  • #10
                    Nguyên văn bởi teovubk Xem bài viết
                    may pac giai thĩ gium em cai Keil Review voi C arm coi.Em dang xai Keil Review de tap viet nhung bi loi :
                    #include < stdio.h>
                    em goi lun: printf("....");
                    no bao loi em hoai cac pac a?? help me
                    vấn đề này là do bạn chưa viết các hàm retarget cho thư viện stdio.h
                    để sửa được lỗi này bạn phải thêm vào project của bạn 2 hàm
                    Code:
                    int sendchar (int ch); // Put Char to UART-0
                    int getkey (void); // Get Char From Uart-0
                    code cụ thể như sau
                    Code:
                    /******************************************************************************/
                    /* RETARGET.C: 'Retarget' layer for target-dependent low level functions      */
                    /******************************************************************************/
                    /* This file is part of the uVision/ARM development tools.                    */
                    /* Copyright (c) 2005 Keil Software. All rights reserved.                     */
                    /* This software may only be used under the terms of a valid, current,        */
                    /* end user licence from KEIL for a compatible version of KEIL software       */
                    /* development tools. Nothing else gives you the right to use this software.  */
                    /******************************************************************************/
                    
                    #include <stdio.h>
                    #include  "serial0.h"
                    
                    #pragma import(__use_no_semihosting_swi)
                    
                    
                    //extern long timeval;    /* in Time.c   */
                    
                    
                    struct __FILE { int handle; /* Add whatever you need here */ };
                    FILE __stdout;
                    FILE __stdin;
                    
                    
                    int fputc(int ch, FILE *f) {
                      return (sendchar(ch));
                    }
                    
                    int fgetc(FILE *f) {
                      return (sendchar(getkey()));
                    }
                    
                    
                    int ferror(FILE *f) {
                      /* Your implementation of ferror */
                      return EOF;
                    }
                    
                    
                    void _ttywrch(int ch) {
                      sendchar (ch);
                    }
                    
                    
                    void _sys_exit(int return_code) {
                      while (1);    /* endless loop */
                    }

                    và đay là function


                    Code:
                    #include "LPC214x.H" 	                                	// LPC2148 MPU Register
                    #include "serial0.h"
                    
                    /******************************/
                    /* Initial UART0 = 9600,N,8,1 */
                    /* VPB(pclk) = 60.00 MHz      */
                    /******************************/
                    /******************************/
                    /* Write Character To UART0   */
                    /******************************/
                    int sendchar (int ch)  
                    {                  
                      if (ch == '\n')  
                      {
                        while (!(U0LSR & 0x20));  								// Wait TXD Buffer Empty
                        U0THR = 0x0D;                          					// Write CR
                      }
                      while (!(U0LSR & 0x20));									// Wait TXD Buffer Empty
                      return (U0THR = ch);										// Write Character
                    }
                    
                    /*****************************/
                    /* Read Character From UART0 */
                    /*****************************/
                    
                    int getkey (void)  
                    {                    
                      while (!(U0LSR & 0x01));									// Wait RXD Receive Data Ready
                      return (U0RBR);											// Get Receice Data & Return
                    }
                    
                    
                    void init_serial0 (void)  
                    {
                      PINSEL0 &= 0xFFFFFFF0;									// Reset P0.0,P0.1 Pin Config
                      PINSEL0 |= 0x00000001;									// Select P0.0 = TxD(UART0)
                      PINSEL0 |= 0x00000004;									// Select P0.1 = RxD(UART0)
                    
                      U0LCR &= 0xFC;											// Reset Word Select(1:0)
                      U0LCR |= 0x03;											// Data Bit = 8 Bit
                      U0LCR &= 0xFB;											// Stop Bit = 1 Bit
                      U0LCR &= 0xF7;											// Parity = Disable
                      U0LCR &= 0xBF;											// Disable Break Control
                      U0LCR |= 0x80;											// Enable Programming of Divisor Latches
                    
                      // U0DLM:U0DLL = 15.00 MHz / [16 x Baud]
                      //             = 15.00 MHz / [16 x 9600]
                      //             = 97.6 = 98 = 0062H
                      U0DLM = 0x00;												// Program Divisor Latch(391) for 9600 Baud
                      U0DLL = 0x62;
                    
                      U0LCR &= 0x7F;											// Disable Programming of Divisor Latches
                    
                      U0FCR |= 0x01;											// FIF0 Enable
                      U0FCR |= 0x02;											// RX FIFO Reset
                      U0FCR |= 0x04;											// TX FIFO Reset
                      U0FCR &= 0x3F;                      
                    }
                    xem thêm chi tiết ở đây


                    http://dientuvietnam.net/forums/show...=12936&page=23

                    Comment


                    • #11
                      Cho mình hỏi code ARM7 cho LPC2100 và AT91SAM7S khác nhau chỗ nào. Mình có coi code mẫu và thấy code cho LPC2100 hình như dễ hơn AT91SAM7S. Ko bít bác nào có thể nói rõ về sự khác biệt này ko? Và có thể áp dụng code của LPC2100 cho AT91SAM7S ko? Và có thể convert code qua lại được ko?
                      Cảm ơn!

                      Comment


                      • #12
                        Em cũng vừa mua một kit sam7s256 của PNLab, nhưng đang có dự án cần dùng IAR. Thực sự đây là lần đầu dùng IAR (trước toàn dùng keil). Thế nên em chưa nắm được về cách thức lập trình trong IAR lắm.

                        Các bác cho em hỏi, IAR nó thường có 1 file board.h trong đó định nghĩa chip và các thanh ghi. Vậy việc lựa chọn chip (at91sam7s128 hay 256) nó nằm ở đâu ah? bởi vì em gặp lỗi "Board does not support the specified chip" này nhg ko thể tìm ra để sửa.

                        Mong nhận được phản hồi từ các bác. Em xin chân thành cảm ơn.

                        Comment


                        • #13
                          Nguyên văn bởi omalee Xem bài viết
                          Cho mình hỏi code ARM7 cho LPC2100 và AT91SAM7S khác nhau chỗ nào. Mình có coi code mẫu và thấy code cho LPC2100 hình như dễ hơn AT91SAM7S. Ko bít bác nào có thể nói rõ về sự khác biệt này ko? Và có thể áp dụng code của LPC2100 cho AT91SAM7S ko? Và có thể convert code qua lại được ko?
                          Cảm ơn!
                          Mỗi hãng sản xuất ARM quy định khác nhau về các thanh ghi, cách thức cấu hình ngoại vi như GPIO, UART... thế nên mỗi với mỗi hãng ARM (như LPC2100 hay AT91SAM7S...) bác phải nắm được cách thức định nghĩa của nó. Không thể convert hay chuyển đổi code của hãng này sang hãng khác được. Còn code dễ hay khó là do người viết thôi bác ah, một người có tư duy về C/C++ tốt sẽ có nhg định nghĩa rõ ràng và logic hơn là nhg người mới bắt đầu. Chứ không có chuyện dễ hơn hay khó hơn.

                          Chúc bác tìm được thành công với mọi loại chip ARM.

                          Comment


                          • #14
                            Vô forum của ATMEL,

                            http://www.at91.com/component/resour...7/3-sam7s.html
                            Community khá đầy đủ, đọc nhiều lần cũng sẽ thấy chân lý mà thôi.

                            Down load gói "at91sam7s-ek.zip" về, trong đó có một số project mẫu cho KEIL, IAR, GNU... có sẵn hết, ta chỉ có việc ngồi chén mà thôi.

                            Sao không dùng opensource WinARM hay là YAGATO gì đó. Xài phần mềm "chùa" nhiều quá ngại tay ghê.
                            Last edited by kamejoko80; 27-01-2010, 08:41.

                            Comment


                            • #15
                              cho minh hoi voi
                              minh bay gio moi tim hieu arm

                              mình dùng trình biên dịch keil 4.01

                              mình viết 1 mẩu nhỏ xem thanh ghi thế nào như sau

                              #include <AT91SAM7S128.H>



                              int main (void) {

                              int i;
                              i=i+1;
                              PIO_PSR = 0x0000FFFF;


                              }
                              ////////////
                              mình tra datasheet rõ ràng có thanh ghi PIO_PSR, PIO_OSR...
                              nhưng khi biên dịch nó toàn báo không định nghĩa thế là sao.
                              hay mình phải mở file nào nữa thế
                              thanks

                              Comment

                              Về tác giả

                              Collapse

                              nguyentrunght Tìm hiểu thêm về nguyentrunght

                              Bài viết mới nhất

                              Collapse

                              Đang tải...
                              X