View previous topic :: View next topic |
Author |
Message |
newguy
Joined: 24 Jun 2004 Posts: 1907
|
PIC18LF26K83, CAN, and PPS (v5.091) [Solved] |
Posted: Tue Sep 01, 2020 6:43 pm |
|
|
Has anyone managed to get CAN working on one of these things? I have CANRX connected to PIN_B2 (which is the default for PPS) and CANTX connected to PIN_B1. CANTX doesn't have a default; in fact, even though the processor has only one CAN peripheral, there exists a CANTX0 and CANTX1 in the list of PPS remappable outputs. I can't find anything definitive in the Microchip documentation (data sheet and a migration guide I found which outlines what to do when porting from 18FxxK80 to the 'K83). I assume that CANTX0 is the proper output, but I tried CANTX1 as well with absolutely no luck.
That aside, I do have CAN reception working. I cannot transmit any CAN packets.
In frustration I changed the PPS1WAY fuse to NOPPS1WAY so that I could try the pps_select() function and have a look at the disassembly. From what I can gather, the compiler is accessing the wrong page (and wrong register) for the PPSLOCK register. I gave up trying to trace what it was doing beyond that and instead hard coded the absolute address of the PPSLOCK register and the RB1PPS register as opposed to using the getenv() function after using said function didn't allow me to transmit CAN packets.
Pretty much at my wits end with this.
Last edited by newguy on Wed Sep 02, 2020 2:17 pm; edited 1 time in total |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19506
|
|
Posted: Wed Sep 02, 2020 12:05 am |
|
|
The 'standard' way to handle PPS and CAN on the CCS drivers, is to do this:
Code: |
#define CAN_RX_PIN PIN_B2
#define CAN_TX_PIN PIN_B1
#include <can-18xxx8.c>
|
This then uses #pin_select to select the pins you have specified.
Now doing this with your chip and compiler version, the code generated
(at the start of main, for PPS), is:
Code: |
000E: MOVLB E
0010: MOVLW 55
0012: MOVLB 3A //Bank 3A
0014: MOVWF xBF //0x3ABF - correct PPSLOCK register
0016: MOVLW AA
0018: MOVWF xBF
001A: BCF xBF.0 //clear PPSLOCKED bit
001C: MOVLW 0A
001E: MOVWF xED
0020: MOVLW 33
0022: MOVWF x09
0024: MOVLW 55
0026: MOVWF xBF
0028: MOVLW AA
002A: MOVWF xBF
|
Which is accessing the correct PPSLOCK register.
So the default code does seem to be setting the register correctly.
Now I must admit the TX0/TX1 bit is odd. However the migration guide
says that TX1, is the equivalent of TX2 on the '80, and the default CANTX
is TX0. The CCS code used as I show, uses:
#pin_select CANTX0 = CAN_TX_PIN
So is using TX0.
Now using the pin_select() operation, does seem to access the wrong bank.
It seems to use bank 39, instead of 3A. Compiling on the current compiler
correctly uses 0x3A. So there is a compiler issue with your version and
the 'inline' pin_select function. |
|
|
newguy
Joined: 24 Jun 2004 Posts: 1907
|
|
Posted: Wed Sep 02, 2020 8:47 am |
|
|
I installed 5.093 (latest version I have) and it's not any better. I can see at the top of main that the
Code: | #pin_select CANTX0 = PIN_B1
#pin_select CANRX = PIN_B2 |
Are accessing the proper registers but even on this version the pin_select() function is completely out to lunch in terms of the registers it accesses.
All that said, my CAN driver is quite heavily customized, but it is still, at heart, based upon the CCS can-18xxx8.c. I cannot send CAN messages.
I even had a look at what module(s) default as output to PIN_B1: the CWG2 and SPI2 (even though the processor only has ONE SPI peripheral) and added code to disable CWG2 and the SPI module (not SPI2 because the PIC doesn't have a second SPI module but that's what the datasheet's pin allocation table says). Still no love. |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19506
|
|
Posted: Wed Sep 02, 2020 10:15 am |
|
|
Once a PPS selection is done it overrides any existing peripherals.
Can confirm I just tried 5.093, and it still uses the wrong addresses.
The fix is in 5.094 unfortunately.... |
|
|
newguy
Joined: 24 Jun 2004 Posts: 1907
|
|
Posted: Wed Sep 02, 2020 2:17 pm |
|
|
Combination of one wrong register address definition, a somehow corrupted CCS installation, and a CCS acknowledged issue with their pps_select() function all added up to about one full day (and one sleepless night) of headaches for me. Solved now.
As an aside: has anyone else noticed that windows 10 and CCS don't seem to get along from time-to-time? This is now the 3rd time in the last year or so on 2 different machines that my CCS installation just starts to behave really badly. Like making code changes and compiling those changes, but the contents of the output hex file not actually changing...? |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19506
|
|
Posted: Thu Sep 03, 2020 4:07 am |
|
|
I think there is an issue that CCS still likes to talk at times to it's files
in the program files directory, which can cause permission problems.
This affects quite a few things like registry keys as well. Basically if you
attempt to write to a location that Windows considers 'protected', the write
will fail. If the virtualisation is enabled, it instead
directs the write to a shadow 'copy' of the required location, stored in the
user data.
This is File & Registry virtualisation.
If your system has this virtualisation disabled, this could result in data loss
(since Windows 10 will not allow the write to occur).
This is in:
\Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Options
run secpol.msc
local policies tab
security options tab.
Then look for
'User Account control Virtualize file and registry write failures'.
This must be enabled to allow applications that use the older Windows
security options to work. If it isn't, turn it on. Reboot after enabling. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Fri Sep 04, 2020 1:08 pm |
|
|
Ttelmah wrote: | \Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Options
|
Ttelmah, can you tell me how to get to this Computer Configuration folder
or window ? I've searched all over my Windows 10 PC and I can't find it. |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19506
|
|
Posted: Sat Sep 05, 2020 12:03 am |
|
|
I say how to do this in the lines after.
It's not a 'folder', it's part of the Windows configuration data.
secpol.msc accesses it as outlined.
They are actually stored in a combination of places. The registry, and
%WINDIR%\system32\grouppolicy
You can also access them using gpedit.msc, instead of secpol.msc, and
then the location is the whole string given. |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9225 Location: Greensville,Ontario
|
|
Posted: Sat Sep 05, 2020 5:36 am |
|
|
One day Mr. T's head will explode from all the data that's in it !!! |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19506
|
|
Posted: Sat Sep 05, 2020 8:01 am |
|
|
I have days at work, where I say, that I need to go and put my head
in a bucket of cold water. It feels like it wants to explode.... |
|
|
newguy
Joined: 24 Jun 2004 Posts: 1907
|
|
Posted: Sat Sep 05, 2020 10:13 am |
|
|
Weird, virtualization is actually enabled on both my machines. No idea why my installations get corrupted from time to time. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Sat Sep 05, 2020 12:00 pm |
|
|
Me too. Already enabled. |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19506
|
|
Posted: Sat Sep 05, 2020 12:21 pm |
|
|
OK.
I have never seen this issue. Have currently about twenty copies of the
compiler all installed in separate directories, and can use them from
Win XP, Win7, Win10 32 & Win 10 64.
Only difference is that these are all 'virtual' copies of Windows, since I run
in a Mac. I also though have a copy on my laptop, which is also Win 10,
and this too has never displayed an issue. The virtualisation should not
change anything, the Windows all run just as normal versions.
However one difference, is in all cases I locate the actual source files
in my own 'source data' directory, and then have sub-directories for each
project. This is owned by me, and has R/W permissions for me. I never
leave the sources in the default/standard locations.
I suspect it has to be a Windows permissions issue of some sort. These
are (unfortunately) sometimes quite common, since Windows shifted to
trying to tighten it's security behaviour up. |
|
|
|