Hallo Forum: Ich suche Code-Beispiele für den ARM MO C_CAN extra dieses Derivat was ich 2mal habe ist nichts zu finden LPC11C24/301. Danke für Tips & Hilfe ! Gruss Holger. #if 0 // can code sniplet#01 void speedCanRequest(void) { msg_obj.msgobj = (0x00);//-OBJ'0x01 msg_obj.mode_id = 0x7DF; //+8 = $7E0 msg_obj.mask = (0x00); //-------------------------------------------- msg_obj.dlc = ( 8); // ((8-Byte-Max-.Packet) // Max-Packet-DATA---0:7 msg_obj.data[0] = 0x02; msg_obj.data[1] = 0x01; msg_obj.data[2] = 0x0D; msg_obj.data[3] = 0x55; msg_obj.data[4] = 0x55; msg_obj.data[5] = 0x55; msg_obj.data[6] = 0x55; msg_obj.data[7] = 0x55; //--SEND via C_CAN--------------------->>>>>> (*rom)->pCAND->can_transmit(&msg_obj); //---------------------------------------- msg_obj.msgobj = (0x01);// new-OBJ'0x01 msg_obj.mode_id = 0x7E8; msg_obj.mask = 0x7E0; //<<<<<<---------------------------- (*rom)->pCAND->config_rxmsgobj(&msg_obj); } // can code sniplet#02 msg_obj.mode_id = (0x200 | CAN_MSGOBJ_STD); msg_obj.mask = 0x000; // $700 (*rom)->pCAND->config_rxmsgobj(&msg_obj); #endif
Genau: (LPC11C24/301) CAN Transceiver is on Chip. für ca. 15 Euro besorgt. WAKEUP11_IRQn = 11, WAKEUP12_IRQn = 12, CAN_IRQn = 13, /*!< CAN Interrupt */ SSP1_IRQn = 14, /*!< SSP1 Interrupt */ I2C_IRQn = 15, /*!< I2C Interrupt */ TIMER_16_0_IRQn = 16, /*!< 16-bit Timer0 Interrupt */ Momentan weiß ich nicht mehr so richtig weiter, wo der Unterschied sein könnte. Das DatenBlatt zeigt eine Basis für die Auf der Argenda von NXP steht Pin to Pin Kompartibel.?? Aber ARM LPC11xx LPC1100 Mix für die LPC11xx-Derivate.
Hier muss ich noch den Ram-Offset machen. Damit das CAN Ram frei bleibt.
1 | ------------- CAN Controller (CAN) ---------------------------- |
2 | LPC11xx_CAN LPC11xx Controller Area Network(CAN) */ |
3 | // C_CAN Device: LPC11C24/301
|
4 | #include "driver_config.h" |
5 | #include "target_config.h" |
6 | |
7 | #include "rom_drivers.h" |
8 | |
9 | #ifndef NULL
|
10 | #define NULL ((void *)0)
|
11 | #endif
|
12 | // Error RX-TX Handling
|
13 | static uint32_t noAnswerErrorCount = (0x00); |
14 | |
15 | /* irq_Vaiables */
|
16 | volatile int irq_toggle = (0x00); |
17 | // volatile int index;
|
18 | |
19 | // ten-Milion
|
20 | // 10_1fff_1ff8 via 1FFf-1FF8 8Digits
|
21 | ROM **CAN_rom = (ROM **)0x1FFF1FF8; // CAN_BASE_ADDR_Hardened_ROM_CODE |
22 | //__BSS(RESERVED) char CAN_driver_memory[256]; // reserva 256 bytes for CAN driver
|
23 | CAN_MSG_OBJ CAN_msg_obj; //,*pCAN_msg_obj=&CAN_msg_obj; |
24 | |
25 | /* Initialize CAN Controller */
|
26 | uint32_t CAN_ClkInitTable[2] = |
27 | { // Silent Dominant-HIGH nothing going out/or.in?? |
28 | 0x00000000UL, // CANCLKDIV |
29 | /* ---_-__-__----*/
|
30 | 0x00001C57UL // CAN_BTR-->Bit-Rate |
31 | };
|
32 | |
33 | /* Callback function prototypes */
|
34 | void CCAN_rx(uint8_t msg_obj_num); |
35 | void CAN_tx(uint8_t msg_obj_num); |
36 | void CAN_error(uint32_t error_info); |
37 | |
38 | /* Publish CAN Callback_Hook_Vector's Functions */
|
39 | CAN_CALLBACKS CAN_v_callbacks = |
40 | { //@Hook#$0,$1,$2 |
41 | CCAN_rx, // go msg_obj_num_rx_01 |
42 | CAN_tx, // |
43 | CAN_error, |
44 | NULL, |
45 | NULL, |
46 | NULL, |
47 | NULL, |
48 | NULL, |
49 | };
|
50 | |
51 | /* NXP. CAN receive callback */
|
52 | /* Function is executed by the Callback handler after
|
53 | a CAN message has been received */
|
54 | |
55 | // Hook on Can_rx 'IRQ
|
56 | int _CAN_rx(uint8_t msg_obj_num_rx_01 ) |
57 | { // Stack Expect |
58 | //via Delegate
|
59 | /* Determine which CAN message has been received */
|
60 | /* Store Mail get Filter */
|
61 | CAN_msg_obj.msgobj = msg_obj_num_rx_01; // $Filter Store ?0x01 |
62 | |
63 | /* Now load up the CAN_msg_obj structure with the received CAN message */
|
64 | (*CAN_rom)->pCAND->can_receive(&CAN_msg_obj); |
65 | //######################################<<<<<<<<<<<<<<<<<<<<<
|
66 | if ( msg_obj_num_rx_01 == (0x01) ) // ?? Trigger = #0x01 |
67 | {
|
68 | /* Simply transmit CAN frame (echo) with with ID +0x100 via buffer 2 */
|
69 | CAN_msg_obj.msgobj = (0x02); // new_object_Number |
70 | /* mode_id */
|
71 | CAN_msg_obj.mode_id = (CAN_msg_obj.mode_id + 0x100);//0x7FF;--<RxDreceive all |
72 | |
73 | // @ECHO Transmit received back, with new mode_id ????
|
74 | (*CAN_rom)->pCAND->can_transmit(&CAN_msg_obj); |
75 | //#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<
|
76 | } // end if |
77 | |
78 | return(0); |
79 | }
|
80 | void CCAN_rx(uint8_t msg_obj_num_rx_01) |
81 | {
|
82 | _CAN_rx(msg_obj_num_rx_01); |
83 | |
84 | return; |
85 | }
|
86 | |
87 | /* CAN transmit callback */
|
88 | /* Function is executed by the Callback handler after
|
89 | a CAN message has been transmitted */
|
90 | void CAN_tx(uint8_t msg_obj_num) |
91 | {
|
92 | return; |
93 | }
|
94 | |
95 | /* CAN error callback */
|
96 | /* Function is executed by the Callback handler after
|
97 | an error has occured on the CAN bus */
|
98 | void CAN_error(uint32_t error_info) |
99 | { // Inc Err_Couter |
100 | noAnswerErrorCount++; |
101 | return; |
102 | }
|
103 | |
104 | int CAN_IRQ_Hook_dispatch (void) |
105 | {
|
106 | //'IRQ-CAN-RomVexec
|
107 | |
108 | (*CAN_rom)->pCAND->isr(); |
109 | // Call @ Delegate Job_Master_#00
|
110 | |
111 | irq_toggle ^= irq_toggle; |
112 | |
113 | return(0); |
114 | }
|
115 | /* CAN interrupt handler */
|
116 | /* The CAN interrupt handler must be provided by the user application.
|
117 | It's function is to call the isr() API witch is located in the ROM */
|
118 | int CAN_IRQHandler (void) |
119 | {
|
120 | int irq_can_master_Irq; |
121 | //
|
122 | irq_can_master_Irq = CAN_IRQ_Hook_dispatch (); |
123 | return(irq_can_master_Irq); |
124 | }
|
125 | void app_can_prep(void) |
126 | {
|
127 | // PIN# 04, 18,19
|
128 | /* Output the Clk onto the CLKOUT Pin PIO0_1 to monitor the freq on a scope */
|
129 | LPC_IOCON->PIO0_1 = (1<<0); //PIN#04'CLK_OUT$4, nRES'03,CAN.(L-#18,H-#19) |
130 | /* Select the MAIN clock as the clock out selection since it's driving the core */
|
131 | LPC_SYSCON->CLKOUTCLKSEL = (0x03); |
132 | /* Set CLKOUTDIV to 6 */
|
133 | LPC_SYSCON->CLKOUTDIV = (0x0A); // CLKOUT Divider = 10 |
134 | }
|
135 | |
136 | int app_CAN_cfg_Init(int w) |
137 | {
|
138 | app_can_prep(); |
139 | |
140 | /* Enable CLKOUT */
|
141 | LPC_SYSCON->CLKOUTUEN = (0x00); |
142 | __NOP ();// Scope-Monitor X-FLIP |
143 | LPC_SYSCON->CLKOUTUEN = (0x01); |
144 | while (! (LPC_SYSCON->CLKOUTUEN & 0x01));// wait |
145 | |
146 | /* Initialize the CAN controller */
|
147 | /* Hardware-Buss */
|
148 | (*CAN_rom)->pCAND->init_can( &CAN_ClkInitTable[0], (0x01)/*#'IRQ-CAN-BUS-TRUE*/ ); |
149 | /* Bind-Struct_To-Hook's 0,1,2 */
|
150 | __NOP (); |
151 | (*CAN_rom)->pCAND->config_calb(&CAN_v_callbacks); |
152 | __NOP (); |
153 | |
154 | return (0); |
155 | }
|
156 | |
157 | |
158 | |
159 | void aapp_main(void) |
160 | {
|
161 | noAnswerErrorCount = (0x00); // Init-Error |
162 | |
163 | app_CAN_cfg_Init(1); // Can-Config-Stuff |
164 | __NOP (); |
165 | |
166 | /* Enable the CAN Interrupt */
|
167 | NVIC_EnableIRQ(CAN_IRQn); // goto_ Vector#13 ??? wo is Der MASTER IRQ Enable???-- |
168 | |
169 | /* Send a simple one time CAN message */
|
170 | CAN_msg_obj.msgobj = (0x00); |
171 | CAN_msg_obj.mode_id = (0x345); |
172 | //CAN_msg_obj.mode_id += 0x100;
|
173 | CAN_msg_obj.mask = 0x00; // BCAST??? |
174 | /* */
|
175 | CAN_msg_obj.dlc = 0x04; // length 4*retry delay |
176 | CAN_msg_obj.data[0] = 'T'; //0x54 |
177 | CAN_msg_obj.data[1] = 'E'; //0x45 |
178 | CAN_msg_obj.data[2] = 'S'; //0x53 |
179 | CAN_msg_obj.data[3] = 'T'; //0x54 |
180 | //CAN_msg_obj.data[4] = '\0'; //NULL-Terminated String 0x04 Bytes
|
181 | // 'CTRL-Z Trigger
|
182 | |
183 | /* TRANSMIT */
|
184 | /*Header-RAW_DATA-Length-CRC */
|
185 | (*CAN_rom)->pCAND->can_transmit(&CAN_msg_obj); |
186 | |
187 | /* Configure message object 1 to receive all 11-bit messages 0x400-0x4FF */
|
188 | CAN_msg_obj.msgobj = (0x01 + 0x00); // |
189 | CAN_msg_obj.mode_id = 0x400 | CAN_MSGOBJ_STD; // oder $00 |
190 | CAN_msg_obj.mask = 0x700; //b0...000:0000 |
191 | |
192 | /* Receive Message */
|
193 | (*CAN_rom)->pCAND->config_rxmsgobj(&CAN_msg_obj); // remote |
194 | |
195 | }
|
196 | |
197 | int main(void) { |
198 | int d; |
199 | while(1) |
200 | {
|
201 | aapp_main(); |
202 | }
|
203 | return (d); |
204 | }
|
Holger Harten schrieb: > Hier muss ich noch den Ram-Offset machen. > > Damit das CAN Ram frei bleibt.
1 | This sample project serves as a simple demonstration to use |
2 | the built-in on-chip CAN drivers available on the LPC11C00 |
3 | NXP microcontroller series. |
4 | |
5 | Hardware Requirements: |
6 | An external CAN Analyzer/Generator is needed to send and |
7 | receive CAN frames to the LPC11C00. |
8 | |
9 | CAN Configuration: |
10 | CAN bus baudrate: 125kbps |
11 | |
12 | Sample Project Details: |
13 | |
14 | 1. Upon reset, the LPC11C00 will send a simple CAN frame |
15 | using the on-chip CAN drivers. It will send a CAN frame |
16 | with its data contents of "TEST". |
17 | |
18 | 2. Whenever the LPC11C00 receives a CAN frame whose ID is |
19 | between 0x400-0x4FF, it will simply resend the received |
20 | frame back onto the CAN bus. |
21 | |
22 | 3. While the LPC11C00 isn't sending or receiving CAN frames |
23 | it will go into SLEEP. It resumes automatically into |
24 | active mode once it has received a CAN frame. |
25 | |
26 | 4. CAUTION! CAUTION! CAUTION! CAUTION! CAUTION! CAUTION! |
27 | =====================================================
|
28 | Make sure to reserve memory from 0x1000 0050 - 0x1000 00B8 |
29 | for the on_chip CAN drivers! |
30 | See the project's linker scripts and the LPC11C1x Usermanual |
31 | for details. |
32 | =====================================================
|
33 | CAUTION! CAUTION! CAUTION! CAUTION! CAUTION! CAUTION! |
This sample project serves as a simple demonstration to use the built-in on-chip CAN drivers available on the LPC11C00 NXP microcontroller series. Hier der spezielle Chip der mit Transceiver, und der ohne ist vom Pinning anders. Das geht aber hoffe ich. Gruss Holger.
Es gibt keinen Unterschied bei der Programmierung zwischen LPC11C14 und LPC11C24. Letzterer ist lediglich ein Multi-Chip-Modul mit CAN-Transceiver. Somit kann man eines der LPC11C14 Beispiele ohne Änderung verwenden. Beim IAR Compiler ist z.B. ein solches dabei. Einfach die kostenfreie Version installieren und rauskopieren: \arm\examples\NXP\LPC11xx\IAR-LPC-11C14-SK\simple\CAN
Lothar schrieb: > Es gibt keinen Unterschied bei der Programmierung zwischen LPC11C14 und Bei den Pic Derivaten ist das auch so supi. "speziell"... 5V CAN PIC 4585<yT) --->LPC_11_C(24)/301 ######################################################### @Lothar Danke für die schnelle Hilfe. Ich werde das mal mit IARC Compiler austesten. Möglich ist ja das einer den --------------------------------------------------- --------------------------------------------------- Der C- example ist für einen LPC1100 Hint: Im Datenblatt sind schon einduetige Derivat#s Hinweise im Command-Set z.B für den SWI Bootloader zu erkennen. ??? Das DatenBlatt ist nicht so gut für mein spez. C_CAN-Derivat gemacht. (ist alles noch neu.. like erata ....) ToDo: suche: Data für spezielle Hardened "ROM-CAN_Exec_CODE" Adresse darin, aber nix ist da zu lesen....??? #################################################################### @StolperFallen-- ausschalten.. Bild: Offene Jumpers für /EN-Bus, + 5V Trigger-Level, (Trim) 3,3 Vdd via Vdd_CAN_5.0 Versorung für int. (NXPTJF1051) Gnd_Can, GND Chip..GND Plane, "120" Ohm Terminator for Can_Bus+/-. ################################################################### Gruss Holger. $Id:: main.c 5034 2010-09-24 23:48:37Z nxp12832 $ * Project: NXP LPC11xx CAN example
LPCXpresso Introduction part 2 training video https://www.youtube.com/watch?v=cLvGwmJAA7k @at 0x80000 war bei meinem 80512 mit CAN supi einfach zu machen..PERIPERIE switch to CAN to RAM bingo>. Link: LPCXpresso's IDE (powered by Code Red) http://www.keil.com/dd/chip/5617.htm __BSS(RESERVED) char CAN_driver_memory[256]; // reserva 256 bytes for CAN driver geht nicht bei meinem neuen LPCXpresso Compiler via Eclipe IDE. ROM **rom = (ROM **)0x1fff1ff8; Hint: für das RAM reserve Mapping.. -------- Bin noch neu in der ARM Programmierung von(LPC11xx), deswegen würde ich mich sehr über Hilfestellung oder irgendwelche konstruktiven Tipps freuen. Vielen Dank. Gruss Holger.
ToDo: LPC 1754 M3 ARM Kernel lesen... JTAG oder SWI (Serial-Wire-Interface) Hacks mit FLASHMAGIC Tool & HEX2BIN.exe lesen Features: Der Pin''/RESET in Verbindung mit Port:_0_$03 via H/L Level ist ein Feature für den Hardened Boot-Loader via CAN oder SWI (RS232), .... ################################################################## Diverse Code-Protect Features 1wire-Bus.Micro-Wire.. SPI-Wire Stuff. LPC800 Derivate. ################################################################### Gruss Holger.
Das JTAG um das Flash der beiden CAN EVAL Boards zu laden. Hint: TestWorkspace RX TX CAN
1 | GPIOSetValue( PORT_0, PIO0_3, 0 ); // Habilitaci�n del transceiver CAN v�a STB (en bajo --> Activo) |
2 | |
3 | //set silent mode
|
4 | // LPC_CAN->CNTL |= (1<<7);
|
5 | // LPC_CAN->TEST |= (1<<3);
|
6 | |
7 | // //set loopback mode
|
8 | // LPC_CAN->CNTL |= (1<<7);
|
9 | // LPC_CAN->TEST |= (1<<4);
|
10 | |
11 | // //operaci�n normal
|
12 | // LPC_CAN->CNTL &= ~(1<<7);
|
13 | // LPC_CAN->TEST &= ~((0x1<<2)|(0x1<<3)|(0x1<<4));
|
14 | |
15 | /* Enable the CAN Interrupt */
|
16 | NVIC_EnableIRQ(CAN_IRQn); |
17 | |
18 | |
19 | /* Configure message object 1 to receive all 11-bit messages 0x200-0x4FF */
|
20 | msg_obj.msgobj = 0; |
21 | msg_obj.mode_id = 0x7FF; //| CAN_MSGOBJ_STD; |
22 | msg_obj.mask = 0x000; |
23 | (*rom)->pCAND->config_rxmsgobj(&msg_obj); |
24 | |
25 | |
26 | while(1){ |
Holger Harten schrieb: > Das JTAG um das Flash der beiden CAN EVAL Boards zu laden. (LPC11C00 isn't sending or receiving CAN frames) Make sure to reserve memory from 0x1000 0050 - 0x1000 00B8 for the on_chip CAN drivers! See the project's linker scripts and the LPC11C1x Usermanual for details. ===================================================== *CAN-NXP-LPC_11xxC\-*301_SIMSYS-Kernel@ARM_MO@12Mhz* Mail-Box 32 Add: $00 BroadCast Allert Burst Addr: $01 .. $02 ..<ptr(2>Objects + Mask-bits) Hardware Reg. Arcitektur:
1 | =====================================================
|
2 | SJA1000 Timing Calculator |
3 | http://www.esacademy.com/en/library/calculators/sja1000-timing-calculator.html |
4 | /*------------- CAN Controller (CAN) ----------------------------*/
|
5 | /** @addtogroup LPC11xx_CAN LPC11xx Controller Area Network(CAN)
|
6 | @{
|
7 | */
|
8 | typedef struct |
9 | {
|
10 | __IO uint32_t CNTL; /*!< Offset: 0x000 (R/W) CAN control Register */ |
11 | __IO uint32_t STAT; /*!< Offset: 0x000 (R/W) Status Register */ |
12 | __IO uint32_t EC; /*!< Offset: 0x000 (R/ ) Error counter Register */ |
13 | __IO uint32_t BT; /*!< Offset: 0x000 (R/W) Bit timing Register */ |
14 | __IO uint32_t INT; /*!< Offset: 0x000 (R/ ) Interrupt Register */ |
15 | __IO uint32_t TEST; /*!< Offset: 0x000 (R/W) Test Register */ |
16 | __IO uint32_t BRPE; /*!< Offset: 0x000 (R/W) Baud rate prescaler extension Register */ |
17 | uint32_t RESERVED0[1]; |
18 | __IO uint32_t IF1_CMDREQ; /*!< Offset: 0x000 (R/W) Message interface 1 command request Register */ |
19 | __IO uint32_t IF1_CMDMSK; /*!< Offset: 0x000 (R/W) Message interface 1 command mask Register */ |
20 | __IO uint32_t IF1_MSK1; /*!< Offset: 0x000 (R/W) Message interface 1 mask 1 Register */ |
21 | __IO uint32_t IF1_MSK2; /*!< Offset: 0x000 (R/W) Message interface 1 mask 2 Register */ |
22 | __IO uint32_t IF1_ARB1; /*!< Offset: 0x000 (R/W) Message interface 1 arbitration 1 Register */ |
23 | __IO uint32_t IF1_ARB2; /*!< Offset: 0x000 (R/W) Message interface 1 arbitration 2 Register */ |
24 | __IO uint32_t IF1_MCTRL; /*!< Offset: 0x000 (R/W) Message interface 1 message control Register */ |
25 | __IO uint32_t IF1_DA1; /*!< Offset: 0x000 (R/W) Message interface 1 data A1 Register */ |
26 | __IO uint32_t IF1_DA2; /*!< Offset: 0x000 (R/W) Message interface 1 data A2 Register */ |
27 | __IO uint32_t IF1_DB1; /*!< Offset: 0x000 (R/W) Message interface 1 data B1 Register */ |
28 | __IO uint32_t IF1_DB2; /*!< Offset: 0x000 (R/W) Message interface 1 data B2 Register */ |
29 | uint32_t RESERVED1[13]; |
30 | __IO uint32_t IF2_CMDREQ; /*!< Offset: 0x000 (R/W) Message interface 2 command request Register */ |
31 | __IO uint32_t IF2_CMDMSK; /*!< Offset: 0x000 (R/W) Message interface 2 command mask Register */ |
32 | __IO uint32_t IF2_MSK1; /*!< Offset: 0x000 (R/W) Message interface 2 mask 1 Register */ |
33 | __IO uint32_t IF2_MSK2; /*!< Offset: 0x000 (R/W) Message interface 2 mask 2 Register */ |
34 | __IO uint32_t IF2_ARB1; /*!< Offset: 0x000 (R/W) Message interface 2 arbitration 1 Register */ |
35 | __IO uint32_t IF2_ARB2; /*!< Offset: 0x000 (R/W) Message interface 2 arbitration 2 Register */ |
36 | __IO uint32_t IF2_MCTRL; /*!< Offset: 0x000 (R/W) Message interface 2 message control Register */ |
37 | __IO uint32_t IF2_DA1; /*!< Offset: 0x000 (R/W) Message interface 2 data A1 Register */ |
38 | __IO uint32_t IF2_DA2; /*!< Offset: 0x000 (R/W) Message interface 2 data A2 Register */ |
39 | __IO uint32_t IF2_DB1; /*!< Offset: 0x000 (R/W) Message interface 2 data B1 Register */ |
40 | __IO uint32_t IF2_DB2; /*!< Offset: 0x000 (R/W) Message interface 2 data B2 Register */ |
41 | uint32_t RESERVED2[21]; |
42 | __I uint32_t TXREQ1; /*!< Offset: 0x000 (R/ ) Transmission request 1 Register */ |
43 | __I uint32_t TXREQ2; /*!< Offset: 0x000 (R/ ) Transmission request 2 Register */ |
44 | uint32_t RESERVED3[6]; |
45 | __I uint32_t ND1; /*!< Offset: 0x000 (R/ ) New data 1 Register */ |
46 | __I uint32_t ND2; /*!< Offset: 0x000 (R/ ) New data 2 Register */ |
47 | uint32_t RESERVED4[6]; |
48 | __I uint32_t IR1; /*!< Offset: 0x000 (R/ ) Interrupt pending 1 Register */ |
49 | __I uint32_t IR2; /*!< Offset: 0x000 (R/ ) Interrupt pending 2 Register */ |
50 | uint32_t RESERVED5[6]; |
51 | __I uint32_t MSGV1; /*!< Offset: 0x000 (R/ ) Message valid 1 Register */ |
52 | __I uint32_t MSGV2; /*!< Offset: 0x000 (R/ ) Message valid 2 Register */ |
53 | uint32_t RESERVED6[6]; |
54 | __IO uint32_t CLKDIV; /*!< Offset: 0x000 (R/W) Can clock divider Register */ |
55 | } LPC_CAN_TypeDef; |
56 | /*@}*/ /* end of group LPC11xx_CAN */ |
Hier das Bild ist das Modul "ohne" Chip-CAN. Also das erst mal nicht kaufen... Das mit Can hat auch einen SUB-9 Connector Plug auf dem Proto-Shield. ###################################################################### Da muss ich noch den Proz./RES Pin jeweils auf GND legen. Proz.--(T-Ristaten). So kann ich jeweils die 2 Eval-Board mit den Can-Chips seperat flashen, und somit wird die Patine nicht wie vorgeschlagen getrennt zersägt... Der Preis von ca.$15 ist für 32Bitter CAN-Develop schon gut. ###################################################################### Remote Target CLK-Clock ist der iCE Debugger(LP-LINK JTAG & SWD) [1#JTAG + (2#Serial Wire Debug InterFace)} Gruss Holger.
Error Handling. Resync SCope §03 LSB first ? Suff bei 00000 oder 11111. ########################################## https://www.youtube.com/watch?v=nlksYTtgeXE (Ver:C_CAN2.0'Bosch) Die Couter'sw Rx /TX Err_counter:127> ist nicht dabei ); 255 BUSS-OFF Self-Remove Fault. Resync (128 )--Bus-Onn...kicker // (#cB)osch-Protocoll Analyse & 'Err-Anarchie..multivariante-'trigger-Hacks //* 6Consequqent Zerros_000_000 ==<>-'Error // NRZ Access Verletzung =<generate.an>ERROR ..Bingo>.. // error status bits #define CAN_ERROR_PASS 0x00000001UL #define CAN_ERROR_WARN 0x00000002UL #define CAN_ERROR_BOFF 0x00000004UL //Buss-OFF >= $7F #define CAN_ERROR_STUF 0x00000008UL //set-HALF-CARRY if >$5 '_*Mirr-inv.flip-bit&Stuff // NRZ Algo. (1=0)-XOR-v@irqHOOK-TURN-(0=1) #define CAN_ERROR_FORM 0x00000010UL #define CAN_ERROR_ACK 0x00000020UL // b10:0000_0000'ACK //###################################################### #define CAN_ERROR_BIT1 0x00000040UL #define CAN_ERROR_BIT0 0x00000080UL // ????? //######################################################## #define CAN_ERROR_CRC 0x00000100UL // Algo. 8Bit CRC DATA +'count+ for_HeadderBurst http://www.esacademy.com/en/library/calculators/sja1000-timing-calculator.html http://knowledgebase.nxp.com/showthread.php?p=15911#post15911 Gruss Holger.
Link: http://knowledgebase.nxp.trimm.net/showthread.php?p=12963#post12963 ###################################################################
1 | >Data Pack-is for you -- grab Data & ACK |
2 | So in der Can_Config geht es an die |
3 | Getreibe Bits .IF1_CMDMS.. |
4 | Siehe Posting der Arcitektur: |
5 | Ich suche noch den optionellen ACK via ByPass Mode ); |
6 | Das ist fast ein Rockwell-Modem, siehe Bild |
7 | echt schräg der C_CAN 2*DSR/DTR--CAN-RockWell |
8 | nur "ein" Timer wurde für das CAN-Feature pre reserved. |
9 | Kann der user den den in der user-App. zumindest uneingeschränkt |
10 | mit lesen ??, um das App-State-Modell noch besser zu trig-timen ???.); |
11 | ToDo
|
12 | CTS,DSR,#'RI-,DCD--iINP--to---MCU; |
13 | DTR,RTS;-----------o-OUT-from-MCU; |
14 | |
15 | /*-----------------------------------------------------------------*/
|
16 | Link: |
17 | http://knowledgebase.nxp.trimm.net/showthread.php?p=12963#post12963 |
18 | ###################################################################
|
19 | void CAN_ConfigureMessages( void ) // Letzter Stand: 15.02.13 |
20 | {
|
21 | uint32_t i; |
22 | uint32_t ext_frame = 0; //29 |
23 | |
24 | /* It's organized in such a way that:
|
25 | obj(x+1) standard receive (RX)
|
26 | obj(x+2) standard transmit(TX)
|
27 | obj(x+3) extended receive
|
28 | obj(x+4) extended transmit where x is 0 to 7
|
29 | obj31 is not used.
|
30 | obj32 is for remote date request test only */
|
31 | // Holg. support "old" Remote-Data-Procedure
|
32 | |
33 | for ( i = 0; i < MSG_OBJ_MAX; i++ ) |
34 | {
|
35 | LPC_CAN->IF1_CMDMSK = WR|MASK|ARB|CTRL|DATAA|DATAB; |
36 | |
37 | if ( ext_frame == 0 ) // Holg. only 11Bit-Identifyer |
38 | {
|
39 | /* Mxtd: 0, Mdir: 0, Mask is 0x7FF */
|
40 | LPC_CAN->IF1_MSK1 = 0x0000; |
41 | LPC_CAN->IF1_MSK2 = ID_STD_MASK << 2; |
42 | |
43 | /* MsgVal: 1, Mtd: 0, Dir: 0, ID = 0x100 */
|
44 | LPC_CAN->IF1_ARB1 = 0x0000; |
45 | LPC_CAN->IF1_ARB2 = ID_MVAL | ((RX_MSG_ID+i) << 2); |
46 | |
47 | if ( (i % 0x02) == 0 ) |
48 | {
|
49 | LPC_CAN->IF1_MCTRL = UMSK|EOB|DLC_MAX; |
50 | }
|
51 | else
|
52 | {
|
53 | LPC_CAN->IF1_MCTRL = UMSK|RXIE|EOB|DLC_MAX; |
54 | ext_frame = 1; // Holg#1. ?29 Bits |
55 | }
|
56 | }
|
57 | else
|
58 | {
|
59 | /* Mxtd: 1, Mdir: 0, Mask is 0x1FFFFFFF */
|
60 | LPC_CAN->IF1_MSK1 = ID_EXT_MASK & 0xFFFF; |
61 | LPC_CAN->IF1_MSK2 = MASK_MXTD | (ID_EXT_MASK >> 16); |
62 | |
63 | /* MsgVal: 1, Mtd: 1, Dir: 0, ID = 0x100000 */
|
64 | LPC_CAN->IF1_ARB1 = (RX_EXT_MSG_ID+i) & 0xFFFF; |
65 | LPC_CAN->IF1_ARB2 = ID_MVAL | ID_MTD | ((RX_EXT_MSG_ID+i) >> 16); |
66 | |
67 | if ( (i % 0x02) == 0 ) |
68 | {
|
69 | LPC_CAN->IF1_MCTRL = UMSK|EOB|DLC_MAX; |
70 | }
|
71 | else
|
72 | {
|
73 | LPC_CAN->IF1_MCTRL = UMSK|RXIE|EOB|DLC_MAX; |
74 | ext_frame = 0; |
75 | }
|
76 | }
|
77 | /* holg. Clear- all 'IF1-index_ed'irqFlgs?*/
|
78 | LPC_CAN->IF1_DA1 = 0x0000; |
79 | LPC_CAN->IF1_DA2 = 0x0000; |
80 | LPC_CAN->IF1_DB1 = 0x0000; |
81 | LPC_CAN->IF1_DB2 = 0x0000; |
82 | |
83 | /*** Holg. Reserve--genug 'RAM vorher */
|
84 | /* Transfer data to message RAM */
|
85 | #if BASIC_MODE
|
86 | LPC_CAN->IF1_CMDREQ = IFCREQ_BUSY; |
87 | #else
|
88 | LPC_CAN->IF1_CMDREQ = i+1; |
89 | #endif
|
90 | while( LPC_CAN->IF1_CMDREQ & IFCREQ_BUSY ); |
91 | }
|
92 | return; |
93 | }
|
94 | /*********** CAN CODE SNIPLET ENDE */
|
Gruss Holger.
http://www.nxp.com/documents/line_card/75017327.pdf CMSIS stands for “Cortex Microcontroller Software Interface Standard”. Please have a look at this line card: Just a short overview: LPC8xx = Cortex M0+ core, simple peripherals LPC11xx = Cortex M0 core, simple peripherals LPC12xx = Cortex M0 core, extended peripherals LPC13xx = Cortex M3 core, simple peripherals LPC17xx = Cortex M3 core, extended peripherals LPC18xx = Cortex M3 core, even more peripherals... LPC40xx = Cortex M4 core, extended peripherals LPC43xx = Cortex M4 + Cortex M0 (dual core), extended peripherals The letters inside the part numbers (e.g. LPC11A14) are a hint for additional functionality: A = analog modules (Comparator, DAC etc.) U = USB C = CAN D = LCD driver E = integrated EEPROM (but other family members have an EEPROM, too...) Usually you can port your program very easily, if the core doesn't change. As an example: LPC1114->LPC11A14 or LPC11U14->LPC1227. I would suggest that you start with a very simple controller like a LPC1114 and a LPCXpresso board. These little beasts are great for exploring the LPC world
Fam: LPC11C00 ARM M0 via CMSIS V2..?V3.CORE-Reg-Pos.Adapter Project: LPC11C24/301 can_onchip.bin Sub Fam: LPC11C00 ARM M0 How to kick in LPC11C24/301 Can-Self-Test-Mode. To-Do: How Handle Reconnect Vexec[0,1,2.NULL,NULL..] Un-ARM-IRQ-Handler& ARM it via Vexec+Mask Testing IRQ + TX & RX Call-Backs via. self test in CAN off disconnected from-Buss ? a'Tristate Lopp_Back_Mode Req: Bits: Im Contr-Reg -Test b'(#4),-Loop-Bk (b#7); Ist -Test a Bypass-Mode-For self-ACK ? ############################################## Question: What is a Overload-Frame, how to use ? ############################################## Loopback freq=0-via-Table[0] Timing-Gen via.Freq-Divider Reg. is NULL-Zero-Nada why ??? a STATIC REZESSIVHIGH LEVEL.--IDLE no Phy-Connected. Like REALTEC NE2000 3-Lopp-Bk Modes. Devide by Zero/throw Exeption IRQ Trap-Vector ??? Pin-IRQ Port_Px 3 is 'Hack ??Self-Stimulate a Datagramm. ---------------------------
1 | #include <cr_section_macros.h> |
2 | #include "driver_config.h" |
3 | #include "target_config.h" |
4 | #include "small_gpio.h" |
5 | #include "gpio.h" |
6 | #include "rom_drivers.h" |
7 | |
8 | #ifndef NULL
|
9 | #define NULL ((void *)0)
|
10 | #endif
|
11 | Grundsätzlich gilt bei Daten-Bytes Sende'Tele-Gramm "'MSB 'First" |
12 | $80Bit $40Bit.. bei RS232 LSB first |
13 | #define LB_FREQ_NULL ((0x00)) // TAB_
|
14 | // loopBack mit Galvanisch on Buss
|
15 | #define BUS_ON_CONNECT_1 (0x01) // react OFF then ON -toggle-System-Init
|
16 | #define BCAST (0x00) // BCAST_LISTEN_ALL
|
17 | |
18 | /*-----SEND LOOP-BACK----------------------------------*/
|
19 | #define OBJ_0 (0x00) //TxtoRx-buff-pstorage_0
|
20 | #define OBJ_1 (0x01) //Rx-buff-pstorage_fom_0
|
21 | //-----------------------------------------
|
22 | /* [SAME MASK OBJ_1 to OBJ_2] */
|
23 | // hirracical_MAX_dominant-neg_00 --to least_dominant 16.. 30,"31-"[0:31]--[31:0]
|
24 | // >___5Bit Low-Level overwrites High-Leves during Add-rez-e_sssss-@Phase#2,
|
25 | // witch comes after the time-slotted 'synccc.Phase#0
|
26 | // setrete all ......;.......255/2......>
|
27 | /*############# MESSAGE OBJECT #############################*/
|
28 | /* #############Descriptor*/
|
29 | #define MASK_OBJ_1 (0x7FF) // ID_A1K_MASK
|
30 | #define MASK_OBJ_2 (0x7FF) // ID_A2K_MASK
|
31 | |
32 | |
33 | __BSS(RESERVED) char CAN_driver_memory[256]; // reserva 256 bytes for CAN driver |
34 | |
35 | ROM **rom = (ROM **)0x1fff1ff8; |
36 | |
37 | CAN_MSG_OBJ msg_obj; |
38 | uint32_t cuenta; |
39 | uint32_t cuenta_Rx; |
40 | uint32_t cuenta_Tx; |
41 | |
42 | /* Initialize CAN Controller */
|
43 | uint32_t ClkInitTable[2] = { |
44 | 0x00000000UL, // CANCLKDIV |
45 | 0x00001C57UL // CAN_BTR |
46 | };
|
47 | |
48 | /* Callback function prototypes */
|
49 | void CAN_rx(uint8_t msg_obj_num); |
50 | void CAN_tx(uint8_t msg_obj_num); |
51 | void CAN_error(uint32_t error_info); |
52 | |
53 | /* Publish CAN Callback Functions */
|
54 | CAN_CALLBACKS callbacks = { |
55 | CAN_rx, |
56 | CAN_tx, |
57 | CAN_error, |
58 | NULL, |
59 | NULL, |
60 | NULL, |
61 | NULL, |
62 | NULL, |
63 | };
|
64 | |
65 | /* CAN receive callback */
|
66 | /* Function is executed by the Callback handler after
|
67 | a CAN message has been received */
|
68 | void CAN_rx(uint8_t msg_obj_num){ |
69 | |
70 | //ToggleGPIOBit(LED_PORT, LEDV_BIT);
|
71 | ++cuenta_Rx; |
72 | |
73 | return; |
74 | }
|
75 | |
76 | /* CAN transmit callback */
|
77 | /* Function is executed by the Callback handler after
|
78 | a CAN message has been transmitted */
|
79 | void CAN_tx(uint8_t msg_obj_num){ |
80 | |
81 | ToggleGPIOBit(LED_PORT, LEDV_BIT); |
82 | ++cuenta_Tx; |
83 | return; |
84 | }
|
85 | |
86 | /* CAN error callback */
|
87 | /* Function is executed by the Callback handler after
|
88 | an error has occured on the CAN bus */
|
89 | void CAN_error(uint32_t error_info){ |
90 | return; |
91 | }
|
92 | |
93 | /* CAN interrupt handler */
|
94 | /* The CAN interrupt handler must be provided by the user application.
|
95 | It's function is to call the isr() API located in the ROM */
|
96 | void CAN_IRQHandler (void){ |
97 | (*rom)->pCAND->isr(); |
98 | }
|
99 | |
100 | int main(void) { |
101 | |
102 | InitGPIO(); |
103 | |
104 | /* Initialize the CAN controller */
|
105 | (*rom)->pCAND->init_can(&ClkInitTable[LB_FREQ_NULL], BUS_ON_CONNECT_1); // |
106 | |
107 | /* Configure the CAN callback functions */
|
108 | (*rom)->pCAND->config_calb(&callbacks); |
109 | |
110 | |
111 | SetGPIOOut(LED_PORT, LEDV_BIT); |
112 | SetGPIOOut(LED_PORT, LEDR_BIT); |
113 | SetGPIOOut(PORT_0, PIO0_3); |
114 | |
115 | GPIOSetValue( PORT_0, PIO0_3, 0 ); // Habilitación del transceiver CAN vía STB (en bajo --> Activo) |
116 | |
117 | |
118 | //set loopback mode
|
119 | LPC_CAN->CNTL |= (1<<7); |
120 | LPC_CAN->TEST |= (1<<4); |
121 | |
122 | /* Enable the CAN Interrupt */
|
123 | NVIC_EnableIRQ(CAN_IRQn); |
124 | |
125 | /* Configure message object 1 to receive all 11-bit messages 0x200-0x4FF */
|
126 | msg_obj.msgobj = (OBJ_0); // ?OBJ=00 |
127 | msg_obj.mode_id = (0x7FF); //| CAN_MSGOBJ_STD; |
128 | //#### 11Bit_ID
|
129 | msg_obj.mask = (0x000); // OBJ-Filter |
130 | |
131 | (*rom)->pCAND->config_rxmsgobj(&msg_obj);//RemoteRX |
132 | cuenta ^= cuenta; //Clear Lock |
133 | while(1) |
134 | {
|
135 | //pre_Inc
|
136 | if (++cuenta == 1000000) // |
137 | {
|
138 | cuenta ^= cuenta; //Clear Lock |
139 | ToggleGPIOBit(LED_PORT, LEDR_BIT); |
140 | |
141 | |
142 | msg_obj.msgobj = OBJ_1; //New |
143 | msg_obj.mode_id = 0x7FF; //Same |
144 | msg_obj.mask = (0x0); // Bit-Filter-Mask |
145 | |
146 | msg_obj.dlc = (0x08 & 0x04); // sizeof as strlen |
147 | msg_obj.data[0] = 'T'; //0x54 |
148 | msg_obj.data[1] = 'E'; //0x45 |
149 | msg_obj.data[2] = 'S'; //0x53 |
150 | msg_obj.data[3] = 'T'; //0x54 |
151 | // ---------------------------->
|
152 | (*rom)->pCAND->can_transmit(&msg_obj); |
153 | |
154 | |
155 | }
|
156 | //cuenta++; // INC
|
157 | }
|
158 | }
|
############################
http://www.computer-solutions.co.uk/info/Embedded_tutorials/can_tutorial.htm Knoten_ACK: Der ACK ist nach dem Major-Prinzip für "alle" Knoten zu beantworten. Und wird auch von jedem via Monitor Feddback gewertet. FallBeispiel: 99 Knoten sagen Ja und 1 Knotn sagt Nein. Bingo> Knoten der Nein gesagt hat ist der Fehler-Teufel. Major Prinzip. via Vote[akt_Vector]über-alle_Knoten_Teilnehmer. PS: Nach so einer Doku habe ich schon immer gesucht...findet man noch nich mal in meinem Buch von Wolfhard Lawrenz CAN Controller Area Networks. 2te Auflage. Also teilnahme an seinem Knoten "Fehler-Teufel" Vote A-Bit kann man auch abschalten. (Bypass-Bit) Remote: Das Remote ist Default als NULL im "DATA-MODE". ##################################################################### Lese noch über CAN-Bibliothek at90CAN128 da steht noch was über Single IRQ-Bit[Vector] für jeweilige MSG-OBJ-Nummer# ... Gruss Holger.
Beitrag "CAN-Bibliothek für den at90CAN128 und das AVRStudio" Hier ist der Link: Und das ist sehr hilfreich. Gruss Holger.
Holger Harten schrieb: > Und das Aktiv-Voting mit Monitor Funktion Die Quarze der Knoten müssen präzise sein, und die Leitung ca. 30m. Der ACK SLOT wo alle Knoten genau bit-aktiv-trig.Voten bingo<>.#Ticks ##################################################################### http://www.vde-verlag.de/buecher/483305/funktionale-sicherheit.html Hint:
__disable_irq(); // -IQR'S Receive : case () //MSG--OBJ[][] UpdateSLI Reg-sep:Bit.Table Set..Clr :end-case() Transmit //MSG--OBJ[][] __enable_irq(); //+IRQ's Anhang: Bild für das IRQ'13 'Handling mit den Object-Bitspuren [][]-->[][] V_OBJ- (x)('x)Also zu jedem Object[#x] sind 2 Reg. krorrospondierende 2 Bitspuren nötig ...x ...'x So kann man also z.B 16 seperate Objecte verwalten. Und die X-or Listen_to Maske auf die 11Bit 'Id# einstellen. ID und ID-Sub-Maske ############################################################# Weiter ging es mit der 29Bit 'Id# bit für Ext_ID=1. Die soll auch noch zu der alten 11Bit kompartibel sein. :); COP88C machte das via Zusatz via ext. Tabellen via '#EEPROM SPI-Wire... Link:code LPC C_CAN_24/301 IRQ-Stuff; http://www.downtowndougbrown.com/2012/06/microcontrollers-gpiotimersinterrupts-example-and-lpcxpresso-lpc1114-review/ Link: Das Wolfhard Lawrenz Can Buch ist schon auf Auflage 5 mit CD-ROM http://elmicro.com/de/bu-lawrenz.html Fazit: Feature LPC C_CAN_24/301 wurde nur 1 Timer dafür geopfert. Gruss Holger.
Thema: Scratchpad? NXP LPC C_CAN_24/301 also C_CAN Wissen für die Schule. Damit man einen 32Bitter auch gegen einen (CAN(8-Bit)Pic4585 hat. Der National Semi COP888BC ist da noch flexibler was CAN via ADC-mess-trigger mit CAN Data via "auto-answer". bietet. Der aktuelle ADC-messwert wird also automatsch in die jeweilige via OBJ#-Mail-Box[Slot-ID] geladen. So ist der adc-Messwert immer aktuell. für den OPC-Server. Also Optimal um eine Techniker-Abschlussarbeit damit umzusetzen. Gruss Holger.
Holger Harten schrieb: > Also Optimal um eine Techniker-Abschlussarbeit damit umzusetzen. Hier der You Tube Kanal Learn Eclipse the LPCXpresso way - from the developers Bild: UART LPC_11_CAN_24_1.PNG Das obere Board ist CAN mit SUB-D 9-Pin. Die spezi. CAN Pinne Z.B BT-SLEEP sind noch zu Tacken da das default OFF-Bus ist. Auch das GND-CAN ist offen ??? Ich hoffe mit dem Loop-Back erst mal das IRQ-Vexec zu testen. Linker Einstellungen CAN ORG Base-Ram und Vexec ROM AdDress. ######################################################################## # Ich vermisse noch das Instruction Stepping Mode, in dem Menue. Ich habe die Debugging Steps ... Bei Way Engeneer habe ich ein Register-Modell für CAN-LPC11C24/301. Gruss Holger.
Hier sind die Ram-Maps via Linker mod, grosszügig mit via 8k-256bytes = 0x1F00 bingo>.
1 | |
2 | |
3 | Also: lpc1114_mem_ram_can_crp.ld |
4 | linker/lpc1114_mem_ram_can_crp.ld" |
5 | MEMORY
|
6 | {
|
7 | /* Define each memory region */
|
8 | /* MFlash32 (rx) : ORIGIN = 0x0, LENGTH = 0x8000 */ /* 32k */
|
9 | RamLoc8 (rwx) : ORIGIN = 0x10000100, LENGTH = 0x1F00 /* 8k-256bytes */
|
10 | |
11 | }
|
12 | /* Define a symbol for the top of each memory region */
|
13 | /* __top_MFlash32 = 0x0 + 0x8000; */
|
14 | __top_RamLoc8 = 0x10000100 + 0x1F00;
|
15 |
|
16 | -----------------------------------------------------
|
17 | INCLUDE "../linker/lpc1114_lib_ram_crp.ld" |
18 | INCLUDE "../linker/lpc1114_mem_ram_can_crp.ld" |
19 | |
20 | ENTRY(ResetISR)
|
21 | |
22 | SECTIONS
|
23 | {
|
24 | .text :
|
25 | {
|
26 | FILL(0xFF);
|
27 | KEEP(*(.isr_vector))
|
28 | *(.text*)
|
29 | *(.rodata*)
|
30 | |
31 | } > RamLoc8
|
32 | |
33 | |
34 | /* for exception handling/unwind - some Newlib functions (in common with C++ and STDC++) use this. */
|
35 |
|
36 | .ARM.extab :
|
37 | {
|
38 | *(.ARM.extab* .gnu.linkonce.armextab.*)
|
39 | } > RamLoc8
|
40 | |
41 | __exidx_start = .;
|
42 | .ARM.exidx :
|
43 | {
|
44 | *(.ARM.exidx* .gnu.linkonce.armexidx.*)
|
45 | } > RamLoc8
|
46 | __exidx_end = .;
|
Hier ist der Autor Kunil Kuda, der schreibt noch mehr Info-Hints zur Timer-Architektur ... Hier Seíte: 20 Info zur Debugger-ASM-Code Stepping. Link: http://de.scribd.com/doc/38280844/LPCXpresso-Hands-On ######################################################### Endlich habe ich den Instruction Stepping Mode am laufen. Problem-Bericht: Hier:-->Link: Beitrag "LPCXpresso Instruction Stepping mode" Gruss Holger. Link zum Lernen der Stepping Mode ca. nach 20 Min. http://www.youtube.com/watch?v=E6vSPloei-0
Holger Harten schrieb: > Link zum Lernen der Stepping Mode ca. nach 20 Min. Hier ein Bild wie es sein Sollte, aber diese "I"Step-ICONS habe ich nicht. Menue: ... [ I step ] Der Mode ist für mich nur mit "Handarbeit" zu aktivieren. ############################################################ Debug: Mode-- Wie bekomme ich die Icons in die Menue-Leiste ( (DEBUG)Liste ganz "oben" - (..axf) Rechte MausTaste ASM - STEP ) In der Liste habe ich das nur mit dem Hint: Seite 20 aktiv bekommen. Gruss Holger.
Kurzer-Update: Hier komme ich noch nicht richtig weiter. Die Version ist bei mir nicht auf UBUNTU ..sind da noch mehr Debug-Features dabei ?? Fazit: Menue-"Variablen"-Reiter-Leiste 1) Die Trigger Einstellung. wie beim FreeScale Compiler ??? prozess_x_variable = 4 via simpler also ohne event == trigger. (oder super Cross-Trigger) z.B ( var1 == 1 && var2 == 3) -------------------------------------------------------------------- watch prozess_x_variable. -- Das ist also was erst mal via Debug-Mode geht.. 2) Die Box (x) Variable ist gesperrt -->geht nix einzutragen. ###################################################################### Hier noch was zu lesen: Freely distributable ARM BOOKS.: http://de.scribd.com/doc/30063713/The-Definitive-Guide-to-the-ARM-Cortex-M3-2010 Hint: http://de.scribd.com/doc/38226967/ARM-Cortex-M0-Overview http://de.scribd.com/doc/84478286/How-to-Use-LPCXpresso-IDE-with-LPCXpresso-Board-ARM-CORTEX-M3 Timer: http://www.scribd.com/doc/38287837/LPC1114-HandsOn Hitex: http://de.scribd.com/doc/37980850/STM32-Cortex-M3 Texas Instruments. SN65HVD1050D CAN TransCEIVER CAN Industrial and Factory Automation ######################################################################## Hint: In dem Hands-On Buch ist noch ein Kapitel isp-EEPROM Flash-Emulation also Linker muss 32Byte Ram am Top-Ram frei lassen. $8000 - 32Byte -->new_Top-Mem Bild Memory-Map CAN(24) Derivat. Gruss Holger.
Holger Harten schrieb: Kurzer-Update: Für CAN MESSAGE 4 bit nibble Accept-Filter & Mask-Register Hier komme richtig weiter mit dem CAN MESSAGE dual Filter. Das Beispiel ist für ein double Filter mit der msg_ID: 0x601. Das Bit-Muster für den Filter rekrutiert sich wie auf dem Bild. ( ab. Roter-Strip mit 3Bit + 4+2+1*0 = "6"....,0001 usw. ) ################################################################ Laut spec wird das Remote-Bit zuerst gesendet. Rules: MSB First .. Default ist das Remote-Bit Null. Hint: http://www.can232.com/docs/CAN_Filter_Std_Dual.pdf DatenBlatt: SJA1000 CAN Controller Gruss Holger.
Ich mag zwar den LPC11C24 aber sind Monologe im Forum angebracht? Schreib doch alles zusammen als Artikel wenn es fertig ist. Dann ist ein solches Posting hilfreich.
Robert Teufel schrieb: > Schreib doch alles zusammen als Artikel wenn es fertig ist. Dann ist ein > > solches Posting hilfreich. @Robert Hallo ! Du kannst hier gerne mitwerkeln u. z.B Beispiele Posten. Besonders ist das nicht, wenn ein Project hier vorab mal mit den Eckdaten vorgestellt wird. Fazit: Die Platine hat erst nach richtiger ext. el. Beschaltung CAN-BUS Funktion. (Siehe Schaltbilder via 10K Pull-Up-via Transceiver-/EN), via (JTAG-Disconnect) Link: Id-Bit+REMOTE_ID+Data+ b(#ACK + CRC EOF:: http://www.me-systeme.de/canbus.html#1578569eb20a42813 Bilder zur CAN-Msg-Id. Beitrag "CAN Komunikation Evalboard MCBSTM32C zu STM32F103VDT6" ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Thema: Linker Script anpassen Für EEPROM-Flash-Emulation & CAN RAM. http://support.code-red-tech.com/CodeRedWiki/EnhancedManagedLinkScripts Für EEPROM muss top-Ram noch 32Byte nach "unten" setzen. somit ist... Der Stack via Top liegt da: at 'top -32 bytes. also ab 0x1F00 - 32 = '0x1EE0 Memory-MAP: [top-mem]------------- [stack}\'down-grow(...) ...............}stack:size My-User-Ram#1//grow-'up [CAN-RAM 50--B8] // Can-Controller-(b'Mob) @Hook [0000_:50-RAM] ################################################## Link: http://knowledgebase.nxp.com/showthread.php?t=2687 Guss Holger.
LINK: RAM Offset base(CAN-RAM)--(top-32bytes) zERO. http://knowledgebase.nxp.com/showthread.php?t=4223&highlight=lpc11c24 Stack_offset: 0 to 32 Byte für ISP Mode http://www.support.code-red-tech.com/CodeRedWiki/ReserveIAPRam +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- Tutorial 1 LPCXpresso com Target Project Manage LPC1769 http://www.youtube.com/watch?v=bcNNzrhN7TY&feature=endscreen&NR=1 ################################################## Link: .Zero Vid-Tut. Switch seq. LPCXpresso to ISP during RESET via P_01 to GND. http://www.youtube.com/watch?v=chFv1EiZcYo Gruss Holger. ######################################################################## # Hint: Increase Stack offset to 32 as described here: http://www.support.code-red-tech.com.../ReserveIAPRam Solution #2-2 Change MCU memory region As mentioned in Solution #1-2 just reduce memory size Memory configuration LPC11Cxx without first 0xC0 bytes and without last 32 bytes (0x2000-0xC0-0x20=0x1F20): Quote: Type Name Location Size RAM RamLoc8 0x100000C0 0x1F20
CCAN_CALLBACKS_T und Register. in Doxygen-Format Link: http://docs.lpcware.com/lpcopen/ccand__11xx_8h.html Link: raw-Can von Zero. TD.A(1,2)/B(1,2) ; je 4 Byte Vector-Data-Buff CAN Problems http://knowledgebase.nxp.trimm.net/showthread.php?t=4249 Hint: Plain C code . http://knowledgebase.nxp.trimm.net/showthread.php?s=a49f67a6f5d7482cbb31e85781a32c23&t=2649&page=2 Gruss Holger.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.