+
+#ifndef SJA1000_H
+#define SJA1000_H
+
+
+/****************** Include Files ********************/
+#include "xil_types.h"
+#include "xstatus.h"
+
+#define SJA1000_S00_AXI_SLV_REG0_OFFSET 0
+#define SJA1000_S00_AXI_SLV_REG1_OFFSET 4
+#define SJA1000_S00_AXI_SLV_REG2_OFFSET 8
+#define SJA1000_S00_AXI_SLV_REG3_OFFSET 12
+#define SJA1000_S00_AXI_SLV_REG4_OFFSET 16
+#define SJA1000_S00_AXI_SLV_REG5_OFFSET 20
+#define SJA1000_S00_AXI_SLV_REG6_OFFSET 24
+#define SJA1000_S00_AXI_SLV_REG7_OFFSET 28
+#define SJA1000_S00_AXI_SLV_REG8_OFFSET 32
+#define SJA1000_S00_AXI_SLV_REG9_OFFSET 36
+#define SJA1000_S00_AXI_SLV_REG10_OFFSET 40
+#define SJA1000_S00_AXI_SLV_REG11_OFFSET 44
+#define SJA1000_S00_AXI_SLV_REG12_OFFSET 48
+#define SJA1000_S00_AXI_SLV_REG13_OFFSET 52
+#define SJA1000_S00_AXI_SLV_REG14_OFFSET 56
+#define SJA1000_S00_AXI_SLV_REG15_OFFSET 60
+#define SJA1000_S00_AXI_SLV_REG16_OFFSET 64
+#define SJA1000_S00_AXI_SLV_REG17_OFFSET 68
+#define SJA1000_S00_AXI_SLV_REG18_OFFSET 72
+#define SJA1000_S00_AXI_SLV_REG19_OFFSET 76
+#define SJA1000_S00_AXI_SLV_REG20_OFFSET 80
+#define SJA1000_S00_AXI_SLV_REG21_OFFSET 84
+#define SJA1000_S00_AXI_SLV_REG22_OFFSET 88
+#define SJA1000_S00_AXI_SLV_REG23_OFFSET 92
+#define SJA1000_S00_AXI_SLV_REG24_OFFSET 96
+#define SJA1000_S00_AXI_SLV_REG25_OFFSET 100
+#define SJA1000_S00_AXI_SLV_REG26_OFFSET 104
+#define SJA1000_S00_AXI_SLV_REG27_OFFSET 108
+#define SJA1000_S00_AXI_SLV_REG28_OFFSET 112
+#define SJA1000_S00_AXI_SLV_REG29_OFFSET 116
+#define SJA1000_S00_AXI_SLV_REG30_OFFSET 120
+#define SJA1000_S00_AXI_SLV_REG31_OFFSET 124
+#define SJA1000_S00_AXI_SLV_REG32_OFFSET 128
+#define SJA1000_S00_AXI_SLV_REG33_OFFSET 132
+#define SJA1000_S00_AXI_SLV_REG34_OFFSET 136
+#define SJA1000_S00_AXI_SLV_REG35_OFFSET 140
+#define SJA1000_S00_AXI_SLV_REG36_OFFSET 144
+#define SJA1000_S00_AXI_SLV_REG37_OFFSET 148
+#define SJA1000_S00_AXI_SLV_REG38_OFFSET 152
+#define SJA1000_S00_AXI_SLV_REG39_OFFSET 156
+#define SJA1000_S00_AXI_SLV_REG40_OFFSET 160
+#define SJA1000_S00_AXI_SLV_REG41_OFFSET 164
+#define SJA1000_S00_AXI_SLV_REG42_OFFSET 168
+#define SJA1000_S00_AXI_SLV_REG43_OFFSET 172
+#define SJA1000_S00_AXI_SLV_REG44_OFFSET 176
+#define SJA1000_S00_AXI_SLV_REG45_OFFSET 180
+#define SJA1000_S00_AXI_SLV_REG46_OFFSET 184
+#define SJA1000_S00_AXI_SLV_REG47_OFFSET 188
+#define SJA1000_S00_AXI_SLV_REG48_OFFSET 192
+#define SJA1000_S00_AXI_SLV_REG49_OFFSET 196
+#define SJA1000_S00_AXI_SLV_REG50_OFFSET 200
+#define SJA1000_S00_AXI_SLV_REG51_OFFSET 204
+#define SJA1000_S00_AXI_SLV_REG52_OFFSET 208
+#define SJA1000_S00_AXI_SLV_REG53_OFFSET 212
+#define SJA1000_S00_AXI_SLV_REG54_OFFSET 216
+#define SJA1000_S00_AXI_SLV_REG55_OFFSET 220
+#define SJA1000_S00_AXI_SLV_REG56_OFFSET 224
+#define SJA1000_S00_AXI_SLV_REG57_OFFSET 228
+#define SJA1000_S00_AXI_SLV_REG58_OFFSET 232
+#define SJA1000_S00_AXI_SLV_REG59_OFFSET 236
+#define SJA1000_S00_AXI_SLV_REG60_OFFSET 240
+#define SJA1000_S00_AXI_SLV_REG61_OFFSET 244
+#define SJA1000_S00_AXI_SLV_REG62_OFFSET 248
+#define SJA1000_S00_AXI_SLV_REG63_OFFSET 252
+#define SJA1000_S00_AXI_SLV_REG64_OFFSET 256
+#define SJA1000_S00_AXI_SLV_REG65_OFFSET 260
+#define SJA1000_S00_AXI_SLV_REG66_OFFSET 264
+#define SJA1000_S00_AXI_SLV_REG67_OFFSET 268
+#define SJA1000_S00_AXI_SLV_REG68_OFFSET 272
+#define SJA1000_S00_AXI_SLV_REG69_OFFSET 276
+#define SJA1000_S00_AXI_SLV_REG70_OFFSET 280
+#define SJA1000_S00_AXI_SLV_REG71_OFFSET 284
+#define SJA1000_S00_AXI_SLV_REG72_OFFSET 288
+#define SJA1000_S00_AXI_SLV_REG73_OFFSET 292
+#define SJA1000_S00_AXI_SLV_REG74_OFFSET 296
+#define SJA1000_S00_AXI_SLV_REG75_OFFSET 300
+#define SJA1000_S00_AXI_SLV_REG76_OFFSET 304
+#define SJA1000_S00_AXI_SLV_REG77_OFFSET 308
+#define SJA1000_S00_AXI_SLV_REG78_OFFSET 312
+#define SJA1000_S00_AXI_SLV_REG79_OFFSET 316
+#define SJA1000_S00_AXI_SLV_REG80_OFFSET 320
+#define SJA1000_S00_AXI_SLV_REG81_OFFSET 324
+#define SJA1000_S00_AXI_SLV_REG82_OFFSET 328
+#define SJA1000_S00_AXI_SLV_REG83_OFFSET 332
+#define SJA1000_S00_AXI_SLV_REG84_OFFSET 336
+#define SJA1000_S00_AXI_SLV_REG85_OFFSET 340
+#define SJA1000_S00_AXI_SLV_REG86_OFFSET 344
+#define SJA1000_S00_AXI_SLV_REG87_OFFSET 348
+#define SJA1000_S00_AXI_SLV_REG88_OFFSET 352
+#define SJA1000_S00_AXI_SLV_REG89_OFFSET 356
+#define SJA1000_S00_AXI_SLV_REG90_OFFSET 360
+#define SJA1000_S00_AXI_SLV_REG91_OFFSET 364
+#define SJA1000_S00_AXI_SLV_REG92_OFFSET 368
+#define SJA1000_S00_AXI_SLV_REG93_OFFSET 372
+#define SJA1000_S00_AXI_SLV_REG94_OFFSET 376
+#define SJA1000_S00_AXI_SLV_REG95_OFFSET 380
+#define SJA1000_S00_AXI_SLV_REG96_OFFSET 384
+#define SJA1000_S00_AXI_SLV_REG97_OFFSET 388
+#define SJA1000_S00_AXI_SLV_REG98_OFFSET 392
+#define SJA1000_S00_AXI_SLV_REG99_OFFSET 396
+#define SJA1000_S00_AXI_SLV_REG100_OFFSET 400
+#define SJA1000_S00_AXI_SLV_REG101_OFFSET 404
+#define SJA1000_S00_AXI_SLV_REG102_OFFSET 408
+#define SJA1000_S00_AXI_SLV_REG103_OFFSET 412
+#define SJA1000_S00_AXI_SLV_REG104_OFFSET 416
+#define SJA1000_S00_AXI_SLV_REG105_OFFSET 420
+#define SJA1000_S00_AXI_SLV_REG106_OFFSET 424
+#define SJA1000_S00_AXI_SLV_REG107_OFFSET 428
+#define SJA1000_S00_AXI_SLV_REG108_OFFSET 432
+#define SJA1000_S00_AXI_SLV_REG109_OFFSET 436
+#define SJA1000_S00_AXI_SLV_REG110_OFFSET 440
+#define SJA1000_S00_AXI_SLV_REG111_OFFSET 444
+#define SJA1000_S00_AXI_SLV_REG112_OFFSET 448
+#define SJA1000_S00_AXI_SLV_REG113_OFFSET 452
+#define SJA1000_S00_AXI_SLV_REG114_OFFSET 456
+#define SJA1000_S00_AXI_SLV_REG115_OFFSET 460
+#define SJA1000_S00_AXI_SLV_REG116_OFFSET 464
+#define SJA1000_S00_AXI_SLV_REG117_OFFSET 468
+#define SJA1000_S00_AXI_SLV_REG118_OFFSET 472
+#define SJA1000_S00_AXI_SLV_REG119_OFFSET 476
+#define SJA1000_S00_AXI_SLV_REG120_OFFSET 480
+#define SJA1000_S00_AXI_SLV_REG121_OFFSET 484
+#define SJA1000_S00_AXI_SLV_REG122_OFFSET 488
+#define SJA1000_S00_AXI_SLV_REG123_OFFSET 492
+#define SJA1000_S00_AXI_SLV_REG124_OFFSET 496
+#define SJA1000_S00_AXI_SLV_REG125_OFFSET 500
+#define SJA1000_S00_AXI_SLV_REG126_OFFSET 504
+#define SJA1000_S00_AXI_SLV_REG127_OFFSET 508
+#define SJA1000_S00_AXI_SLV_REG128_OFFSET 512
+#define SJA1000_S00_AXI_SLV_REG129_OFFSET 516
+#define SJA1000_S00_AXI_SLV_REG130_OFFSET 520
+#define SJA1000_S00_AXI_SLV_REG131_OFFSET 524
+#define SJA1000_S00_AXI_SLV_REG132_OFFSET 528
+#define SJA1000_S00_AXI_SLV_REG133_OFFSET 532
+#define SJA1000_S00_AXI_SLV_REG134_OFFSET 536
+#define SJA1000_S00_AXI_SLV_REG135_OFFSET 540
+#define SJA1000_S00_AXI_SLV_REG136_OFFSET 544
+#define SJA1000_S00_AXI_SLV_REG137_OFFSET 548
+#define SJA1000_S00_AXI_SLV_REG138_OFFSET 552
+#define SJA1000_S00_AXI_SLV_REG139_OFFSET 556
+#define SJA1000_S00_AXI_SLV_REG140_OFFSET 560
+#define SJA1000_S00_AXI_SLV_REG141_OFFSET 564
+#define SJA1000_S00_AXI_SLV_REG142_OFFSET 568
+#define SJA1000_S00_AXI_SLV_REG143_OFFSET 572
+#define SJA1000_S00_AXI_SLV_REG144_OFFSET 576
+#define SJA1000_S00_AXI_SLV_REG145_OFFSET 580
+#define SJA1000_S00_AXI_SLV_REG146_OFFSET 584
+#define SJA1000_S00_AXI_SLV_REG147_OFFSET 588
+#define SJA1000_S00_AXI_SLV_REG148_OFFSET 592
+#define SJA1000_S00_AXI_SLV_REG149_OFFSET 596
+#define SJA1000_S00_AXI_SLV_REG150_OFFSET 600
+#define SJA1000_S00_AXI_SLV_REG151_OFFSET 604
+#define SJA1000_S00_AXI_SLV_REG152_OFFSET 608
+#define SJA1000_S00_AXI_SLV_REG153_OFFSET 612
+#define SJA1000_S00_AXI_SLV_REG154_OFFSET 616
+#define SJA1000_S00_AXI_SLV_REG155_OFFSET 620
+#define SJA1000_S00_AXI_SLV_REG156_OFFSET 624
+#define SJA1000_S00_AXI_SLV_REG157_OFFSET 628
+#define SJA1000_S00_AXI_SLV_REG158_OFFSET 632
+#define SJA1000_S00_AXI_SLV_REG159_OFFSET 636
+#define SJA1000_S00_AXI_SLV_REG160_OFFSET 640
+#define SJA1000_S00_AXI_SLV_REG161_OFFSET 644
+#define SJA1000_S00_AXI_SLV_REG162_OFFSET 648
+#define SJA1000_S00_AXI_SLV_REG163_OFFSET 652
+#define SJA1000_S00_AXI_SLV_REG164_OFFSET 656
+#define SJA1000_S00_AXI_SLV_REG165_OFFSET 660
+#define SJA1000_S00_AXI_SLV_REG166_OFFSET 664
+#define SJA1000_S00_AXI_SLV_REG167_OFFSET 668
+#define SJA1000_S00_AXI_SLV_REG168_OFFSET 672
+#define SJA1000_S00_AXI_SLV_REG169_OFFSET 676
+#define SJA1000_S00_AXI_SLV_REG170_OFFSET 680
+#define SJA1000_S00_AXI_SLV_REG171_OFFSET 684
+#define SJA1000_S00_AXI_SLV_REG172_OFFSET 688
+#define SJA1000_S00_AXI_SLV_REG173_OFFSET 692
+#define SJA1000_S00_AXI_SLV_REG174_OFFSET 696
+#define SJA1000_S00_AXI_SLV_REG175_OFFSET 700
+#define SJA1000_S00_AXI_SLV_REG176_OFFSET 704
+#define SJA1000_S00_AXI_SLV_REG177_OFFSET 708
+#define SJA1000_S00_AXI_SLV_REG178_OFFSET 712
+#define SJA1000_S00_AXI_SLV_REG179_OFFSET 716
+#define SJA1000_S00_AXI_SLV_REG180_OFFSET 720
+#define SJA1000_S00_AXI_SLV_REG181_OFFSET 724
+#define SJA1000_S00_AXI_SLV_REG182_OFFSET 728
+#define SJA1000_S00_AXI_SLV_REG183_OFFSET 732
+#define SJA1000_S00_AXI_SLV_REG184_OFFSET 736
+#define SJA1000_S00_AXI_SLV_REG185_OFFSET 740
+#define SJA1000_S00_AXI_SLV_REG186_OFFSET 744
+#define SJA1000_S00_AXI_SLV_REG187_OFFSET 748
+#define SJA1000_S00_AXI_SLV_REG188_OFFSET 752
+#define SJA1000_S00_AXI_SLV_REG189_OFFSET 756
+#define SJA1000_S00_AXI_SLV_REG190_OFFSET 760
+#define SJA1000_S00_AXI_SLV_REG191_OFFSET 764
+#define SJA1000_S00_AXI_SLV_REG192_OFFSET 768
+#define SJA1000_S00_AXI_SLV_REG193_OFFSET 772
+#define SJA1000_S00_AXI_SLV_REG194_OFFSET 776
+#define SJA1000_S00_AXI_SLV_REG195_OFFSET 780
+#define SJA1000_S00_AXI_SLV_REG196_OFFSET 784
+#define SJA1000_S00_AXI_SLV_REG197_OFFSET 788
+#define SJA1000_S00_AXI_SLV_REG198_OFFSET 792
+#define SJA1000_S00_AXI_SLV_REG199_OFFSET 796
+#define SJA1000_S00_AXI_SLV_REG200_OFFSET 800
+#define SJA1000_S00_AXI_SLV_REG201_OFFSET 804
+#define SJA1000_S00_AXI_SLV_REG202_OFFSET 808
+#define SJA1000_S00_AXI_SLV_REG203_OFFSET 812
+#define SJA1000_S00_AXI_SLV_REG204_OFFSET 816
+#define SJA1000_S00_AXI_SLV_REG205_OFFSET 820
+#define SJA1000_S00_AXI_SLV_REG206_OFFSET 824
+#define SJA1000_S00_AXI_SLV_REG207_OFFSET 828
+#define SJA1000_S00_AXI_SLV_REG208_OFFSET 832
+#define SJA1000_S00_AXI_SLV_REG209_OFFSET 836
+#define SJA1000_S00_AXI_SLV_REG210_OFFSET 840
+#define SJA1000_S00_AXI_SLV_REG211_OFFSET 844
+#define SJA1000_S00_AXI_SLV_REG212_OFFSET 848
+#define SJA1000_S00_AXI_SLV_REG213_OFFSET 852
+#define SJA1000_S00_AXI_SLV_REG214_OFFSET 856
+#define SJA1000_S00_AXI_SLV_REG215_OFFSET 860
+#define SJA1000_S00_AXI_SLV_REG216_OFFSET 864
+#define SJA1000_S00_AXI_SLV_REG217_OFFSET 868
+#define SJA1000_S00_AXI_SLV_REG218_OFFSET 872
+#define SJA1000_S00_AXI_SLV_REG219_OFFSET 876
+#define SJA1000_S00_AXI_SLV_REG220_OFFSET 880
+#define SJA1000_S00_AXI_SLV_REG221_OFFSET 884
+#define SJA1000_S00_AXI_SLV_REG222_OFFSET 888
+#define SJA1000_S00_AXI_SLV_REG223_OFFSET 892
+#define SJA1000_S00_AXI_SLV_REG224_OFFSET 896
+#define SJA1000_S00_AXI_SLV_REG225_OFFSET 900
+#define SJA1000_S00_AXI_SLV_REG226_OFFSET 904
+#define SJA1000_S00_AXI_SLV_REG227_OFFSET 908
+#define SJA1000_S00_AXI_SLV_REG228_OFFSET 912
+#define SJA1000_S00_AXI_SLV_REG229_OFFSET 916
+#define SJA1000_S00_AXI_SLV_REG230_OFFSET 920
+#define SJA1000_S00_AXI_SLV_REG231_OFFSET 924
+#define SJA1000_S00_AXI_SLV_REG232_OFFSET 928
+#define SJA1000_S00_AXI_SLV_REG233_OFFSET 932
+#define SJA1000_S00_AXI_SLV_REG234_OFFSET 936
+#define SJA1000_S00_AXI_SLV_REG235_OFFSET 940
+#define SJA1000_S00_AXI_SLV_REG236_OFFSET 944
+#define SJA1000_S00_AXI_SLV_REG237_OFFSET 948
+#define SJA1000_S00_AXI_SLV_REG238_OFFSET 952
+#define SJA1000_S00_AXI_SLV_REG239_OFFSET 956
+#define SJA1000_S00_AXI_SLV_REG240_OFFSET 960
+#define SJA1000_S00_AXI_SLV_REG241_OFFSET 964
+#define SJA1000_S00_AXI_SLV_REG242_OFFSET 968
+#define SJA1000_S00_AXI_SLV_REG243_OFFSET 972
+#define SJA1000_S00_AXI_SLV_REG244_OFFSET 976
+#define SJA1000_S00_AXI_SLV_REG245_OFFSET 980
+#define SJA1000_S00_AXI_SLV_REG246_OFFSET 984
+#define SJA1000_S00_AXI_SLV_REG247_OFFSET 988
+#define SJA1000_S00_AXI_SLV_REG248_OFFSET 992
+#define SJA1000_S00_AXI_SLV_REG249_OFFSET 996
+#define SJA1000_S00_AXI_SLV_REG250_OFFSET 1000
+#define SJA1000_S00_AXI_SLV_REG251_OFFSET 1004
+#define SJA1000_S00_AXI_SLV_REG252_OFFSET 1008
+#define SJA1000_S00_AXI_SLV_REG253_OFFSET 1012
+#define SJA1000_S00_AXI_SLV_REG254_OFFSET 1016
+
+
+/**************************** Type Definitions *****************************/
+/**
+ *
+ * Write a value to a SJA1000 register. A 32 bit write is performed.
+ * If the component is implemented in a smaller width, only the least
+ * significant data is written.
+ *
+ * @param BaseAddress is the base address of the SJA1000device.
+ * @param RegOffset is the register offset from the base to write to.
+ * @param Data is the data written to the register.
+ *
+ * @return None.
+ *
+ * @note
+ * C-style signature:
+ * void SJA1000_mWriteReg(u32 BaseAddress, unsigned RegOffset, u32 Data)
+ *
+ */
+#define SJA1000_mWriteReg(BaseAddress, RegOffset, Data) \
+ Xil_Out32((BaseAddress) + (RegOffset), (u32)(Data))
+
+/**
+ *
+ * Read a value from a SJA1000 register. A 32 bit read is performed.
+ * If the component is implemented in a smaller width, only the least
+ * significant data is read from the register. The most significant data
+ * will be read as 0.
+ *
+ * @param BaseAddress is the base address of the SJA1000 device.
+ * @param RegOffset is the register offset from the base to write to.
+ *
+ * @return Data is the data from the register.
+ *
+ * @note
+ * C-style signature:
+ * u32 SJA1000_mReadReg(u32 BaseAddress, unsigned RegOffset)
+ *
+ */
+#define SJA1000_mReadReg(BaseAddress, RegOffset) \
+ Xil_In32((BaseAddress) + (RegOffset))
+
+/************************** Function Prototypes ****************************/
+/**
+ *
+ * Run a self-test on the driver/device. Note this may be a destructive test if
+ * resets of the device are performed.
+ *
+ * If the hardware system is not built correctly, this function may never
+ * return to the caller.
+ *
+ * @param baseaddr_p is the base address of the SJA1000 instance to be worked on.
+ *
+ * @return
+ *
+ * - XST_SUCCESS if all self-test code passed
+ * - XST_FAILURE if any self-test code failed
+ *
+ * @note Caching must be turned off for this function to work.
+ * @note Self test may fail if data memory and device are not on the same bus.
+ *
+ */
+XStatus SJA1000_Reg_SelfTest(void * baseaddr_p);
+
+#endif // SJA1000_H