Thông báo

Collapse
No announcement yet.

Thảo luận về ARM LPC 2138/2148

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

  • Các anh ơi cho em hỏi chút
    Với con ARM mà csó thêm cổng PORT1 (nhu LPC2138..) muốn sử dụng cổng PORT1 đó thì khai báo như nào. PORT0 thi thiết lập PINSEL0. Muốn PORT1 cũng dùng GPIO thì khai báo như nào?

    Comment


    • PINSEL0, PINSEL1, PINSEL2 dùng cho việc cấu hình chức năng cho PORT0.
      PINSELx không thấy đề cập cho PORT1, có lẽ khi reset LPC thì PORT1 được cấu hình thành GPIO rồi. Bạn hãy thí nghiệm bằng cách xuất giá trị ra PORT1, gắn vào dãy LED kiểm tra thì sẽ rõ.

      Comment


      • Mình đang làm luận văn về ARM7. Do mới bắt tay vào làm nên cũng không biết gì nhiều. Các bác xem dùm em trong hình con U3 mcp130T làm nhiệm vụ gì vậy? Có thể không dùng con này được không vậy? Nếu không dùng con này thì có thể nạp CT vào chip thông qua cổng com được không vậy? (do tiết tiền nên không có mua mạch nạp J-Tag). Thank các bác.

        Comment


        • Chào mừng bạn đã tham gia vào thế giới VĐK ARM.

          Chíp MCP130T có chức năng reset cho hệ thống, chủ ý là giữ chân reset tích cực cho đến khi nào nguồn cung cấp ổn định với mong muốn khởi động hệ thống an toàn.
          Dùng mạch RC và reset button là ổn, không dùng chíp này cũng không sao.

          Về việc program LPC2000 có hai cách.

          Dùng JTAG, bạn có thể tự làm lấy cable wigler JTAG rẻ tiền (thông qua LPT port)
          Dùng UART, qui trình nạp được tóm tắt nhưa sau:
          1> Gữ chân BSEL mức low đồng thời ấn nút reset.
          2> Nhả chân reset và sau đó nhả chân BSEL lên mức hight, tại thời điểm này chíp của bạn đang ở trang thái UART boot mode, sẵn sàng nạp internal flash thông qua chương trình Philips ISP untility hoặc dùng command line của tool winarm.

          Sau đay là sơ đồ nạp tự động mà K đã dùng trước đây.


          Chúc thành công

          Comment


          • Cám ơn bạn K nhiều nha.
            1> Gữ chân BSEL mức low đồng thời ấn nút reset.
            2> Nhả chân reset và sau đó nhả chân BSEL lên mức hight, tại thời điểm này chíp của bạn đang ở trang thái UART boot mode, sẵn sàng nạp internal flash thông qua chương trình Philips ISP untility hoặc dùng command line của tool winarm.

            Sau đay là sơ đồ nạp tự động mà K đã dùng trước đây.
            Vậy là mình chỉ cần lắp mạch như vậy và dùng phần mềm để nạp thôi đúng không?Vì bước 1 và 2 đã có cổng com(chân 7 và chân 4) làm rồi đúng không?

            Comment


            • Đúng rồi bạn ah

              Comment


              • Cám ơn bạn K nhiều.
                Last edited by hongtam; 11-07-2009, 10:29.

                Comment


                • Phương pháp nạp chương trình từ thẻ nhớ ngoài sẽ là một phương pháp hay để các bạn tham khảo khi dùng chíp xử lý ARM
                  Cty TNHH Ứng Dụng Phát Triển Công Nghệ ECAPRO

                  Comment


                  • không ai giúp mình về điều khiển động cơ 1 chiều dùng ARM sao?

                    Comment


                    • thuật toán PID thì có săn trên mạng rùi;bạn xem rồi map sang y chang thôi!

                      Comment


                      • Code sai chỗ nào

                        Code:
                        void UART0_Init(int BaudRate)
                        {
                        	unsigned int brd = (Fpclk / BaudRate << 4);
                        
                        	// Connect P0.0 & P0.1 to Tx & Rx
                        	PINSEL0 &= 0xFFFFFFF0;		// Reset P0.0 & P0.1
                        	PINSEL0 |= 0x00000001;		// Connect P0.0 to Tx
                        	PINSEL0 |= 0x00000004;		// Connect P0.1 to Rx
                        
                        	// Set Terminal Characteristics
                        	U0LCR |= 0x02;	// 8 Bits Word Select
                        	U0LCR &= 0xFB;	// 1 Stop Bit
                        	U0LCR &= 0xF7;	// No Parity
                        	U0LCR |= 0x80;	// DLAB = 1 to change Baudrate
                        
                        	/*
                        	X-TAL = 12Mhz
                        	Multiple = 5
                        	Divide = 2
                        	--> CPU Clock = X-TAL*Multiple = 60Mhz
                        	Peripheral Clock PCLK = CPU Clk/4 = 15Mhz
                        	*/
                        	// Set Baudrate
                        	U0DLL = (brd & 0xFF);			
                        	U0DLM = (brd >> 8);			
                        	U0LCR &= 0x7F;			// DLAB = 0 to stop change BaudRate
                        
                        	// FIFO Enable
                        	U0FCR |= 0x01;	// FIFO Enable
                        	U0FCR |= 0x02;	// Rx Reset
                        	U0FCR |= 0x04;	// Tx Reset
                        	U0FCR &= 0x3F;	// Trigger Level 0
                        }
                        Em đang học ARM, mua chung với thằng bạn Kit LPC2103, đã học đc 1 thời gian, GPIO rùi LCD làm dc rùi. Tuy nhiên đụng tới phần UART có vấn đề, đoạn code trên em đọc datasheet, rùi đọc các ví dụ ở đầu luồng này chỉnh sửa tí chút ^^. Tuy nhiên em gặp 1 vấn đề nhờ mọi ng giúp em đó là khi em nạp vào LPC2103 thật thì:
                        - Dùng lệnh printf của stdio.h ko gửi đc gì lên Terminal cả
                        - Sau đó em tức mình send kí tự từ máy tính xuống LPC thì nó gửi kí tự lại lên máy tính .
                        - BaudRate luôn là 9600 ko thay đổi đc.
                        Em nạp ISP board LPC2103 của NhungViet. Mọi ng giải thích dùm em nhé. Đang cố cuối tháng ăn xong con ARM này.

                        Comment


                        • bạn pót nguyen code lên đi; nói thêm nữa là bạn sài keil version mấy! RV hay CARM!chứ bạn pót moi cái code init thế này thì sao ma biet bạn sai cho nào!

                          Comment


                          • Hic

                            Đợi các bác trả lời lâu quá, sau vài ngày ôm Keil ARM em phát hiện vài điều sau, có gì sai các bác lượng thứ:
                            - Stdio.h của Keil nhà em có vấn đề, viết các hàm getchar() với putchar() thế nào nó ko dịch cho, trong khi code em down trên mạng về giống hệt dịch ngon lành chạy.
                            - Em chán tự viết hàm kiểu printf() nó lại dịch và chạy ngon lành (nhưng mà phải sửa hàm thành get_char() với put_char(), khác tên hàm kia)
                            Nói chung em ko rõ cái này lắm mất 3 hôm vật lộn với UART, hic hic. Ko biết ai mới học có dính chưởng này như em ko?????

                            Ha ha, post xong mới thấy bài của bác hbaocr. Em dùng Keil mới nhất down trên trang của Keil ấy, hình như là RV nhưng mà sau đó em còn phải down cái CARM về cài vào (có lỗi gì đó em search trên trang của Keil down cái fix về)
                            Thực ra cái code này em tự code lại (chủ yếu sửa cho đúng BaudRate thôi) theo code mẫu down từ trang Hethongnhung, đem về copy sang, chỉnh sửa chút ít.
                            Quan trọng nhất là bác có thể giải thích hộ em vấn đề Getchar() với Putchar() ko? Vì ko dùng hàm printf() thì buồn lắm, tiện thể em gửi bác cái lỗi mà Keil nó báo em:
                            Main.c(6): error: #79: expected a type specifier --> lỗi báo với dòng "int putchar(int ch)"
                            Last edited by Auto_engine; 14-08-2009, 00:59.

                            Comment


                            • Nguyên văn bởi Auto_engine Xem bài viết
                              Đợi các bác trả lời lâu quá, sau vài ngày ôm Keil ARM em phát hiện vài điều sau, có gì sai các bác lượng thứ:
                              - Stdio.h của Keil nhà em có vấn đề, viết các hàm getchar() với putchar() thế nào nó ko dịch cho, trong khi code em down trên mạng về giống hệt dịch ngon lành chạy.
                              - Em chán tự viết hàm kiểu printf() nó lại dịch và chạy ngon lành (nhưng mà phải sửa hàm thành get_char() với put_char(), khác tên hàm kia)
                              Nói chung em ko rõ cái này lắm mất 3 hôm vật lộn với UART, hic hic. Ko biết ai mới học có dính chưởng này như em ko?????

                              Ha ha, post xong mới thấy bài của bác hbaocr. Em dùng Keil mới nhất down trên trang của Keil ấy, hình như là RV nhưng mà sau đó em còn phải down cái CARM về cài vào (có lỗi gì đó em search trên trang của Keil down cái fix về)
                              Thực ra cái code này em tự code lại (chủ yếu sửa cho đúng BaudRate thôi) theo code mẫu down từ trang Hethongnhung, đem về copy sang, chỉnh sửa chút ít.
                              Quan trọng nhất là bác có thể giải thích hộ em vấn đề Getchar() với Putchar() ko? Vì ko dùng hàm printf() thì buồn lắm, tiện thể em gửi bác cái lỗi mà Keil nó báo em:
                              Main.c(6): error: #79: expected a type specifier --> lỗi báo với dòng "int putchar(int ch)"
                              kà kà; kô phải lỗi của file stdio.h đâu!
                              nếu mình đoán kô lầm thì bạn đang sài keil 3.05. hii
                              project dau của bạn lỗi vì nó cofig là dùng realview complie nên nó dùng thu vien stdio.h của RV. muốn sử dụng thư viện này bạn phải "retarget" 2 fuction là senchar(); và getkey() thay vì putchar và getchar như của keilCARM complier!
                              đây là file retarget
                              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 */
                              }
                              đây là file fuction
                              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;                      
                              }

                              Comment


                              • Ai chà lằng nhằng phết

                                Cảm ơn anh hbaocr trả lời hộ em. Em cũng đã để ý tới sự sai khác này, vì khi vào Options for Target nó hiện ra 2 cách config khác nhau:
                                - 1 cách config mỳ ăn liền ngay code, dịch chạy ngon lành.
                                - 1 cách config kia thì luôn xuất hiện lỗi đó mặc dù là từ Keil trong máy em ra.


                                - Cái đầu tiên màn hình Options for Target, chuyển tới tab Target thì bên tay phải có Code generation cho mình chọn chế độ ARM-mode hoặc Thumb-mode (cái này em nghĩ của RV)


                                - Cái thứ 2 thì màn hình Options for Target, chuyển tới tab Target thì bên tay phải lại là các box cho mình tích vào có box Big Endian bỏ trống (chắc là thuộc CARM)

                                Xem ra có vẻ lằng nhằng, chả hiểu tối qua em nghịch thế nào thì đến sáng mọi thứ chạy tốt lắm làm project UART nào là chạy project đấy, nhưng sau khi thấy Keil ra phiên bản 3.80a, hứng chí em down về thì ôi thôi mọi việc lại trở về như cũ.
                                Anh hbaocr có cách nào giúp em chỉ sử dụng CARM(soft down về dùng, chứ em ngó trên trang của Keil toàn RV hic) ko, vì em thấy quyển "The Insider's guide to the Phillips ARM7-Based MicroControllers" của Hitex có hg dẫn học khá đầy đủ (em cũng đang học nó + Datasheet).
                                Thanks anh.
                                Attached Files

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X