PIC32MZ I2S generator

General discussion on mikroPascal PRO for PIC32.
Post Reply
Author
Message
yo2lio
Posts: 1878
Joined: 19 Sep 2006 12:57
Location: Romania, Arad City
Contact:

PIC32MZ I2S generator

#1 Post by yo2lio » 20 Jan 2021 17:41

Hello,

Here is a small example for how to use the PIC32MZ I2S master.

My code, generate 100Hz, 1KHz, 10KHz, 20KHz, out to I2S, at 180kbps, 24bit.

The I2S must be connected to a 24bit I2S DAC.

For test, I used EasyPic Fusion V7, PIC32MZEFH144, with the folowing config:

Clock form external on board 24MHz OSC, divide by 4, multiply with 63 and PLL divide with 2, final clock 189MHz.

PORTB L, leds must be ON, RG0 switch to down, RG0 button to change the freq.

Enjoy!

Code: Select all

program I2S_Generator;

const sin_table_const_100hz : array[1800] of longint = (
0x800000,0x807261,0x80e4c3,0x815723,0x81c983,0x823be1,0x82ae3d,0x832097,
0x8392ef,0x840544,0x847796,0x84e9e4,0x855c2e,0x85ce74,0x8640b5,0x86b2f1,
0x872528,0x879759,0x880985,0x887ba9,0x88edc7,0x895fde,0x89d1ed,0x8a43f5,
0x8ab5f4,0x8b27eb,0x8b99d9,0x8c0bbd,0x8c7d98,0x8cef69,0x8d6130,0x8dd2ec,
0x8e449d,0x8eb642,0x8f27dc,0x8f996a,0x900aeb,0x907c5f,0x90edc6,0x915f20,
0x91d06c,0x9241aa,0x92b2d9,0x9323f9,0x93950a,0x94060b,0x9476fc,0x94e7dd,
0x9558ad,0x95c96c,0x963a1a,0x96aab6,0x971b40,0x978bb7,0x97fc1c,0x986c6d,
0x98dcab,0x994cd5,0x99bceb,0x9a2ced,0x9a9cd9,0x9b0cb0,0x9b7c72,0x9bec1e,
0x9c5bb3,0x9ccb32,0x9d3a99,0x9da9ea,0x9e1922,0x9e8843,0x9ef74b,0x9f663b,
0x9fd511,0xa043ce,0xa0b272,0xa120fb,0xa18f6a,0xa1fdbe,0xa26bf6,0xa2da14,
0xa34815,0xa3b5fa,0xa423c3,0xa4916f,0xa4fefe,0xa56c6f,0xa5d9c2,0xa646f7,
0xa6b40e,0xa72105,0xa78dde,0xa7fa97,0xa8672f,0xa8d3a8,0xa94000,0xa9ac37,
0xaa184d,0xaa8441,0xaaf013,0xab5bc3,0xabc750,0xac32bb,0xac9e02,0xad0925,
0xad7424,0xaddf00,0xae49b6,0xaeb448,0xaf1eb4,0xaf88fb,0xaff31b,0xb05d16,
0xb0c6e9,0xb13096,0xb19a1c,0xb2037a,0xb26cb0,0xb2d5bd,0xb33ea2,0xb3a75f,
0xb40ff2,0xb4785b,0xb4e09a,0xb548b0,0xb5b09a,0xb6185a,0xb67fef,0xb6e758,
0xb74e95,0xb7b5a6,0xb81c8b,0xb88343,0xb8e9cd,0xb9502b,0xb9b65a,0xba1c5c,
0xba822f,0xbae7d3,0xbb4d48,0xbbb28e,0xbc17a4,0xbc7c8a,0xbce140,0xbd45c6,
0xbdaa1a,0xbe0e3d,0xbe722f,0xbed5ee,0xbf397c,0xbf9cd7,0xbfffff,0xc062f4,
0xc0c5b6,0xc12844,0xc18a9e,0xc1ecc4,0xc24eb5,0xc2b071,0xc311f8,0xc37349,
0xc3d464,0xc43549,0xc495f8,0xc4f670,0xc556b1,0xc5b6bb,0xc6168c,0xc67626,
0xc6d588,0xc734b1,0xc793a1,0xc7f258,0xc850d6,0xc8af1a,0xc90d24,0xc96af3,
0xc9c888,0xca25e2,0xca8301,0xcadfe4,0xcb3c8b,0xcb98f7,0xcbf526,0xcc5118,
0xccaccd,0xcd0846,0xcd6380,0xcdbe7d,0xce193c,0xce73bc,0xcecdfe,0xcf2801,
0xcf81c4,0xcfdb49,0xd0348d,0xd08d91,0xd0e655,0xd13ed9,0xd1971b,0xd1ef1d,
0xd246dc,0xd29e5b,0xd2f597,0xd34c91,0xd3a348,0xd3f9bd,0xd44fef,0xd4a5dd,
0xd4fb88,0xd550ef,0xd5a612,0xd5faf0,0xd64f8a,0xd6a3de,0xd6f7ee,0xd74bb8,
0xd79f3c,0xd7f27b,0xd84573,0xd89825,0xd8ea90,0xd93cb4,0xd98e91,0xd9e026,
0xda3173,0xda8279,0xdad336,0xdb23ab,0xdb73d6,0xdbc3b9,0xdc1353,0xdc62a3,
0xdcb1a9,0xdd0065,0xdd4ed7,0xdd9cff,0xddeadb,0xde386d,0xde85b4,0xded2ae,
0xdf1f5e,0xdf6bc1,0xdfb7d8,0xe003a3,0xe04f21,0xe09a52,0xe0e536,0xe12fcc,
0xe17a15,0xe1c411,0xe20dbe,0xe2571c,0xe2a02d,0xe2e8ee,0xe33161,0xe37984,
0xe3c158,0xe408dc,0xe45010,0xe496f5,0xe4dd88,0xe523cc,0xe569be,0xe5af60,
0xe5f4b0,0xe639af,0xe67e5d,0xe6c2b8,0xe706c2,0xe74a79,0xe78dde,0xe7d0f0,
0xe813af,0xe8561b,0xe89833,0xe8d9f8,0xe91b6a,0xe95c87,0xe99d51,0xe9ddc6,
0xea1de6,0xea5db2,0xea9d29,0xeadc4b,0xeb1b17,0xeb598e,0xeb97af,0xebd57a,
0xec12ef,0xec500e,0xec8cd6,0xecc948,0xed0562,0xed4126,0xed7c93,0xedb7a8,
0xedf265,0xee2ccb,0xee66d8,0xeea08e,0xeed9eb,0xef12ef,0xef4b9b,0xef83ee,
0xefbbe8,0xeff389,0xf02ad0,0xf061be,0xf09852,0xf0ce8c,0xf1046c,0xf139f2,
0xf16f1d,0xf1a3ee,0xf1d864,0xf20c80,0xf24040,0xf273a4,0xf2a6ae,0xf2d95c,
0xf30bae,0xf33da4,0xf36f3f,0xf3a07d,0xf3d15e,0xf401e4,0xf4320c,0xf461d8,
0xf49147,0xf4c059,0xf4ef0e,0xf51d65,0xf54b5f,0xf578fb,0xf5a639,0xf5d319,
0xf5ff9c,0xf62bc0,0xf65785,0xf682ec,0xf6adf5,0xf6d89f,0xf702ea,0xf72cd5,
0xf75662,0xf77f8f,0xf7a85d,0xf7d0cc,0xf7f8da,0xf82089,0xf847d8,0xf86ec7,
0xf89556,0xf8bb84,0xf8e152,0xf906c0,0xf92bcd,0xf95079,0xf974c4,0xf998ae,
0xf9bc37,0xf9df5f,0xfa0226,0xfa248b,0xfa468f,0xfa6831,0xfa8971,0xfaaa4f,
0xfacacc,0xfaeae6,0xfb0a9f,0xfb29f5,0xfb48e8,0xfb6779,0xfb85a8,0xfba374,
0xfbc0dd,0xfbdde4,0xfbfa87,0xfc16c8,0xfc32a6,0xfc4e20,0xfc6937,0xfc83eb,
0xfc9e3b,0xfcb828,0xfcd1b1,0xfcead6,0xfd0398,0xfd1bf6,0xfd33f0,0xfd4b86,
0xfd62b8,0xfd7986,0xfd8fef,0xfda5f5,0xfdbb96,0xfdd0d2,0xfde5ab,0xfdfa1e,
0xfe0e2d,0xfe21d8,0xfe351d,0xfe47fe,0xfe5a7a,0xfe6c91,0xfe7e44,0xfe8f91,
0xfea079,0xfeb0fc,0xfec11a,0xfed0d2,0xfee026,0xfeef14,0xfefd9c,0xff0bc0,
0xff197d,0xff26d6,0xff33c9,0xff4056,0xff4c7d,0xff583f,0xff639c,0xff6e92,
0xff7923,0xff834e,0xff8d13,0xff9672,0xff9f6c,0xffa7ff,0xffb02d,0xffb7f4,
0xffbf56,0xffc652,0xffcce7,0xffd317,0xffd8e0,0xffde44,0xffe341,0xffe7d8,
0xffec09,0xffefd4,0xfff338,0xfff637,0xfff8cf,0xfffb01,0xfffccd,0xfffe33,
0xffff33,0xffffcc,0xffffff,0xffffcc,0xffff33,0xfffe33,0xfffccd,0xfffb01,
0xfff8cf,0xfff637,0xfff338,0xffefd4,0xffec09,0xffe7d8,0xffe341,0xffde44,
0xffd8e0,0xffd317,0xffcce7,0xffc652,0xffbf56,0xffb7f4,0xffb02d,0xffa7ff,
0xff9f6c,0xff9672,0xff8d13,0xff834e,0xff7923,0xff6e92,0xff639c,0xff583f,
0xff4c7d,0xff4056,0xff33c9,0xff26d6,0xff197d,0xff0bc0,0xfefd9c,0xfeef14,
0xfee026,0xfed0d2,0xfec11a,0xfeb0fc,0xfea079,0xfe8f91,0xfe7e44,0xfe6c91,
0xfe5a7a,0xfe47fe,0xfe351d,0xfe21d8,0xfe0e2d,0xfdfa1e,0xfde5ab,0xfdd0d2,
0xfdbb96,0xfda5f5,0xfd8fef,0xfd7986,0xfd62b8,0xfd4b86,0xfd33f0,0xfd1bf6,
0xfd0398,0xfcead6,0xfcd1b1,0xfcb828,0xfc9e3b,0xfc83eb,0xfc6937,0xfc4e20,
0xfc32a6,0xfc16c8,0xfbfa87,0xfbdde4,0xfbc0dd,0xfba374,0xfb85a8,0xfb6779,
0xfb48e8,0xfb29f5,0xfb0a9f,0xfaeae6,0xfacacc,0xfaaa4f,0xfa8971,0xfa6831,
0xfa468f,0xfa248b,0xfa0226,0xf9df5f,0xf9bc37,0xf998ae,0xf974c4,0xf95079,
0xf92bcd,0xf906c0,0xf8e152,0xf8bb84,0xf89556,0xf86ec7,0xf847d8,0xf82089,
0xf7f8da,0xf7d0cc,0xf7a85d,0xf77f8f,0xf75662,0xf72cd5,0xf702ea,0xf6d89f,
0xf6adf5,0xf682ec,0xf65785,0xf62bc0,0xf5ff9c,0xf5d319,0xf5a639,0xf578fb,
0xf54b5f,0xf51d65,0xf4ef0e,0xf4c059,0xf49147,0xf461d8,0xf4320c,0xf401e4,
0xf3d15e,0xf3a07d,0xf36f3f,0xf33da4,0xf30bae,0xf2d95c,0xf2a6ae,0xf273a4,
0xf24040,0xf20c80,0xf1d864,0xf1a3ee,0xf16f1d,0xf139f2,0xf1046c,0xf0ce8c,
0xf09852,0xf061be,0xf02ad0,0xeff389,0xefbbe8,0xef83ee,0xef4b9b,0xef12ef,
0xeed9eb,0xeea08e,0xee66d8,0xee2ccb,0xedf265,0xedb7a8,0xed7c93,0xed4126,
0xed0562,0xecc948,0xec8cd6,0xec500e,0xec12ef,0xebd57a,0xeb97af,0xeb598e,
0xeb1b17,0xeadc4b,0xea9d29,0xea5db2,0xea1de6,0xe9ddc6,0xe99d51,0xe95c87,
0xe91b6a,0xe8d9f8,0xe89833,0xe8561b,0xe813af,0xe7d0f0,0xe78dde,0xe74a79,
0xe706c2,0xe6c2b8,0xe67e5d,0xe639af,0xe5f4b0,0xe5af60,0xe569be,0xe523cc,
0xe4dd88,0xe496f5,0xe45010,0xe408dc,0xe3c158,0xe37984,0xe33161,0xe2e8ee,
0xe2a02d,0xe2571c,0xe20dbe,0xe1c411,0xe17a15,0xe12fcc,0xe0e536,0xe09a52,
0xe04f21,0xe003a3,0xdfb7d8,0xdf6bc1,0xdf1f5e,0xded2ae,0xde85b4,0xde386d,
0xddeadb,0xdd9cff,0xdd4ed7,0xdd0065,0xdcb1a9,0xdc62a3,0xdc1353,0xdbc3b9,
0xdb73d6,0xdb23ab,0xdad336,0xda8279,0xda3173,0xd9e026,0xd98e91,0xd93cb4,
0xd8ea90,0xd89825,0xd84573,0xd7f27b,0xd79f3c,0xd74bb8,0xd6f7ee,0xd6a3de,
0xd64f8a,0xd5faf0,0xd5a612,0xd550ef,0xd4fb88,0xd4a5dd,0xd44fef,0xd3f9bd,
0xd3a348,0xd34c91,0xd2f597,0xd29e5b,0xd246dc,0xd1ef1d,0xd1971b,0xd13ed9,
0xd0e655,0xd08d91,0xd0348d,0xcfdb49,0xcf81c4,0xcf2801,0xcecdfe,0xce73bc,
0xce193c,0xcdbe7d,0xcd6380,0xcd0846,0xccaccd,0xcc5118,0xcbf526,0xcb98f7,
0xcb3c8b,0xcadfe4,0xca8301,0xca25e2,0xc9c888,0xc96af3,0xc90d24,0xc8af1a,
0xc850d6,0xc7f258,0xc793a1,0xc734b1,0xc6d588,0xc67626,0xc6168c,0xc5b6bb,
0xc556b1,0xc4f670,0xc495f8,0xc43549,0xc3d464,0xc37349,0xc311f8,0xc2b071,
0xc24eb5,0xc1ecc4,0xc18a9e,0xc12844,0xc0c5b6,0xc062f4,0xbfffff,0xbf9cd7,
0xbf397c,0xbed5ee,0xbe722f,0xbe0e3d,0xbdaa1a,0xbd45c6,0xbce140,0xbc7c8a,
0xbc17a4,0xbbb28e,0xbb4d48,0xbae7d3,0xba822f,0xba1c5c,0xb9b65a,0xb9502b,
0xb8e9cd,0xb88343,0xb81c8b,0xb7b5a6,0xb74e95,0xb6e758,0xb67fef,0xb6185a,
0xb5b09a,0xb548b0,0xb4e09a,0xb4785b,0xb40ff2,0xb3a75f,0xb33ea2,0xb2d5bd,
0xb26cb0,0xb2037a,0xb19a1c,0xb13096,0xb0c6e9,0xb05d16,0xaff31b,0xaf88fb,
0xaf1eb4,0xaeb448,0xae49b6,0xaddf00,0xad7424,0xad0925,0xac9e02,0xac32bb,
0xabc750,0xab5bc3,0xaaf013,0xaa8441,0xaa184d,0xa9ac37,0xa94000,0xa8d3a8,
0xa8672f,0xa7fa97,0xa78dde,0xa72105,0xa6b40e,0xa646f7,0xa5d9c2,0xa56c6f,
0xa4fefe,0xa4916f,0xa423c3,0xa3b5fa,0xa34815,0xa2da14,0xa26bf6,0xa1fdbe,
0xa18f6a,0xa120fb,0xa0b272,0xa043ce,0x9fd511,0x9f663b,0x9ef74b,0x9e8843,
0x9e1922,0x9da9ea,0x9d3a99,0x9ccb32,0x9c5bb3,0x9bec1e,0x9b7c72,0x9b0cb0,
0x9a9cd9,0x9a2ced,0x99bceb,0x994cd5,0x98dcab,0x986c6d,0x97fc1c,0x978bb7,
0x971b40,0x96aab6,0x963a1a,0x95c96c,0x9558ad,0x94e7dd,0x9476fc,0x94060b,
0x93950a,0x9323f9,0x92b2d9,0x9241aa,0x91d06c,0x915f20,0x90edc6,0x907c5f,
0x900aeb,0x8f996a,0x8f27dc,0x8eb642,0x8e449d,0x8dd2ec,0x8d6130,0x8cef69,
0x8c7d98,0x8c0bbd,0x8b99d9,0x8b27eb,0x8ab5f4,0x8a43f5,0x89d1ed,0x895fde,
0x88edc7,0x887ba9,0x880985,0x879759,0x872528,0x86b2f1,0x8640b5,0x85ce74,
0x855c2e,0x84e9e4,0x847796,0x840544,0x8392ef,0x832097,0x82ae3d,0x823be1,
0x81c983,0x815723,0x80e4c3,0x807261,0x800000,0x7f8d9e,0x7f1b3c,0x7ea8dc,
0x7e367c,0x7dc41e,0x7d51c2,0x7cdf68,0x7c6d10,0x7bfabb,0x7b8869,0x7b161b,
0x7aa3d1,0x7a318b,0x79bf4a,0x794d0e,0x78dad7,0x7868a6,0x77f67a,0x778456,
0x771238,0x76a021,0x762e12,0x75bc0a,0x754a0b,0x74d814,0x746626,0x73f442,
0x738267,0x731096,0x729ecf,0x722d13,0x71bb62,0x7149bd,0x70d823,0x706695,
0x6ff514,0x6f83a0,0x6f1239,0x6ea0df,0x6e2f93,0x6dbe55,0x6d4d26,0x6cdc06,
0x6c6af5,0x6bf9f4,0x6b8903,0x6b1822,0x6aa752,0x6a3693,0x69c5e5,0x695549,
0x68e4bf,0x687448,0x6803e3,0x679392,0x672354,0x66b32a,0x664314,0x65d312,
0x656326,0x64f34f,0x64838d,0x6413e1,0x63a44c,0x6334cd,0x62c566,0x625615,
0x61e6dd,0x6177bc,0x6108b4,0x6099c4,0x602aee,0x5fbc31,0x5f4d8d,0x5edf04,
0x5e7095,0x5e0241,0x5d9409,0x5d25eb,0x5cb7ea,0x5c4a05,0x5bdc3c,0x5b6e90,
0x5b0101,0x5a9390,0x5a263d,0x59b908,0x594bf1,0x58defa,0x587221,0x580568,
0x5798d0,0x572c57,0x56bfff,0x5653c8,0x55e7b2,0x557bbe,0x550fec,0x54a43c,
0x5438af,0x53cd44,0x5361fd,0x52f6da,0x528bdb,0x5220ff,0x51b649,0x514bb7,
0x50e14b,0x507704,0x500ce4,0x4fa2e9,0x4f3916,0x4ecf69,0x4e65e3,0x4dfc85,
0x4d934f,0x4d2a42,0x4cc15d,0x4c58a0,0x4bf00d,0x4b87a4,0x4b1f65,0x4ab74f,
0x4a4f65,0x49e7a5,0x498010,0x4918a7,0x48b16a,0x484a59,0x47e374,0x477cbc,
0x471632,0x46afd4,0x4649a5,0x45e3a3,0x457dd0,0x45182c,0x44b2b7,0x444d71,
0x43e85b,0x438375,0x431ebf,0x42ba39,0x4255e5,0x41f1c2,0x418dd0,0x412a11,
0x40c683,0x406328,0x400000,0x3f9d0b,0x3f3a49,0x3ed7bb,0x3e7561,0x3e133b,
0x3db14a,0x3d4f8e,0x3cee07,0x3c8cb6,0x3c2b9b,0x3bcab6,0x3b6a07,0x3b098f,
0x3aa94e,0x3a4944,0x39e973,0x3989d9,0x392a77,0x38cb4e,0x386c5e,0x380da7,
0x37af29,0x3750e5,0x36f2db,0x36950c,0x363777,0x35da1d,0x357cfe,0x35201b,
0x34c374,0x346708,0x340ad9,0x33aee7,0x335332,0x32f7b9,0x329c7f,0x324182,
0x31e6c3,0x318c43,0x313201,0x30d7fe,0x307e3b,0x3024b6,0x2fcb72,0x2f726e,
0x2f19aa,0x2ec126,0x2e68e4,0x2e10e2,0x2db923,0x2d61a4,0x2d0a68,0x2cb36e,
0x2c5cb7,0x2c0642,0x2bb010,0x2b5a22,0x2b0477,0x2aaf10,0x2a59ed,0x2a050f,
0x29b075,0x295c21,0x290811,0x28b447,0x2860c3,0x280d84,0x27ba8c,0x2767da,
0x27156f,0x26c34b,0x26716e,0x261fd9,0x25ce8c,0x257d86,0x252cc9,0x24dc54,
0x248c29,0x243c46,0x23ecac,0x239d5c,0x234e56,0x22ff9a,0x22b128,0x226300,
0x221524,0x21c792,0x217a4b,0x212d51,0x20e0a1,0x20943e,0x204827,0x1ffc5c,
0x1fb0de,0x1f65ad,0x1f1ac9,0x1ed033,0x1e85ea,0x1e3bee,0x1df241,0x1da8e3,
0x1d5fd2,0x1d1711,0x1cce9e,0x1c867b,0x1c3ea7,0x1bf723,0x1bafef,0x1b690a,
0x1b2277,0x1adc33,0x1a9641,0x1a509f,0x1a0b4f,0x19c650,0x1981a2,0x193d47,
0x18f93d,0x18b586,0x187221,0x182f0f,0x17ec50,0x17a9e4,0x1767cc,0x172607,
0x16e495,0x16a378,0x1662ae,0x162239,0x15e219,0x15a24d,0x1562d6,0x1523b4,
0x14e4e8,0x14a671,0x146850,0x142a85,0x13ed10,0x13aff1,0x137329,0x1336b7,
0x12fa9d,0x12bed9,0x12836c,0x124857,0x120d9a,0x11d334,0x119927,0x115f71,
0x112614,0x10ed10,0x10b464,0x107c11,0x104417,0x100c76,0xfd52f,0xf9e41,
0xf67ad,0xf3173,0xefb93,0xec60d,0xe90e2,0xe5c11,0xe279b,0xdf37f,
0xdbfbf,0xd8c5b,0xd5951,0xd26a3,0xcf451,0xcc25b,0xc90c0,0xc5f82,
0xc2ea1,0xbfe1b,0xbcdf3,0xb9e27,0xb6eb8,0xb3fa6,0xb10f1,0xae29a,
0xab4a0,0xa8704,0xa59c6,0xa2ce6,0xa0063,0x9d43f,0x9a87a,0x97d13,
0x9520a,0x92760,0x8fd15,0x8d32a,0x8a99d,0x88070,0x857a2,0x82f33,
0x80725,0x7df76,0x7b827,0x79138,0x76aa9,0x7447b,0x71ead,0x6f93f,
0x6d432,0x6af86,0x68b3b,0x66751,0x643c8,0x620a0,0x5fdd9,0x5db74,
0x5b970,0x597ce,0x5768e,0x555b0,0x53533,0x51519,0x4f560,0x4d60a,
0x4b717,0x49886,0x47a57,0x45c8b,0x43f22,0x4221b,0x40578,0x3e937,
0x3cd59,0x3b1df,0x396c8,0x37c14,0x361c4,0x347d7,0x32e4e,0x31529,
0x2fc67,0x2e409,0x2cc0f,0x2b479,0x29d47,0x28679,0x27010,0x25a0a,
0x24469,0x22f2d,0x21a54,0x205e1,0x1f1d2,0x1de27,0x1cae2,0x1b801,
0x1a585,0x1936e,0x181bb,0x1706e,0x15f86,0x14f03,0x13ee5,0x12f2d,
0x11fd9,0x110eb,0x10263,0xf43f,0xe682,0xd929,0xcc36,0xbfa9,
0xb382,0xa7c0,0x9c63,0x916d,0x86dc,0x7cb1,0x72ec,0x698d,
0x6093,0x5800,0x4fd2,0x480b,0x40a9,0x39ad,0x3318,0x2ce8,
0x271f,0x21bb,0x1cbe,0x1827,0x13f6,0x102b,0xcc7,0x9c8,
0x730,0x4fe,0x332,0x1cc,0xcc,0x33,0x0,0x33,
0xcc,0x1cc,0x332,0x4fe,0x730,0x9c8,0xcc7,0x102b,
0x13f6,0x1827,0x1cbe,0x21bb,0x271f,0x2ce8,0x3318,0x39ad,
0x40a9,0x480b,0x4fd2,0x5800,0x6093,0x698d,0x72ec,0x7cb1,
0x86dc,0x916d,0x9c63,0xa7c0,0xb382,0xbfa9,0xcc36,0xd929,
0xe682,0xf43f,0x10263,0x110eb,0x11fd9,0x12f2d,0x13ee5,0x14f03,
0x15f86,0x1706e,0x181bb,0x1936e,0x1a585,0x1b801,0x1cae2,0x1de27,
0x1f1d2,0x205e1,0x21a54,0x22f2d,0x24469,0x25a0a,0x27010,0x28679,
0x29d47,0x2b479,0x2cc0f,0x2e409,0x2fc67,0x31529,0x32e4e,0x347d7,
0x361c4,0x37c14,0x396c8,0x3b1df,0x3cd59,0x3e937,0x40578,0x4221b,
0x43f22,0x45c8b,0x47a57,0x49886,0x4b717,0x4d60a,0x4f560,0x51519,
0x53533,0x555b0,0x5768e,0x597ce,0x5b970,0x5db74,0x5fdd9,0x620a0,
0x643c8,0x66751,0x68b3b,0x6af86,0x6d432,0x6f93f,0x71ead,0x7447b,
0x76aa9,0x79138,0x7b827,0x7df76,0x80725,0x82f33,0x857a2,0x88070,
0x8a99d,0x8d32a,0x8fd15,0x92760,0x9520a,0x97d13,0x9a87a,0x9d43f,
0xa0063,0xa2ce6,0xa59c6,0xa8704,0xab4a0,0xae29a,0xb10f1,0xb3fa6,
0xb6eb8,0xb9e27,0xbcdf3,0xbfe1b,0xc2ea1,0xc5f82,0xc90c0,0xcc25b,
0xcf451,0xd26a3,0xd5951,0xd8c5b,0xdbfbf,0xdf37f,0xe279b,0xe5c11,
0xe90e2,0xec60d,0xefb93,0xf3173,0xf67ad,0xf9e41,0xfd52f,0x100c76,
0x104417,0x107c11,0x10b464,0x10ed10,0x112614,0x115f71,0x119927,0x11d334,
0x120d9a,0x124857,0x12836c,0x12bed9,0x12fa9d,0x1336b7,0x137329,0x13aff1,
0x13ed10,0x142a85,0x146850,0x14a671,0x14e4e8,0x1523b4,0x1562d6,0x15a24d,
0x15e219,0x162239,0x1662ae,0x16a378,0x16e495,0x172607,0x1767cc,0x17a9e4,
0x17ec50,0x182f0f,0x187221,0x18b586,0x18f93d,0x193d47,0x1981a2,0x19c650,
0x1a0b4f,0x1a509f,0x1a9641,0x1adc33,0x1b2277,0x1b690a,0x1bafef,0x1bf723,
0x1c3ea7,0x1c867b,0x1cce9e,0x1d1711,0x1d5fd2,0x1da8e3,0x1df241,0x1e3bee,
0x1e85ea,0x1ed033,0x1f1ac9,0x1f65ad,0x1fb0de,0x1ffc5c,0x204827,0x20943e,
0x20e0a1,0x212d51,0x217a4b,0x21c792,0x221524,0x226300,0x22b128,0x22ff9a,
0x234e56,0x239d5c,0x23ecac,0x243c46,0x248c29,0x24dc54,0x252cc9,0x257d86,
0x25ce8c,0x261fd9,0x26716e,0x26c34b,0x27156f,0x2767da,0x27ba8c,0x280d84,
0x2860c3,0x28b447,0x290811,0x295c21,0x29b075,0x2a050f,0x2a59ed,0x2aaf10,
0x2b0477,0x2b5a22,0x2bb010,0x2c0642,0x2c5cb7,0x2cb36e,0x2d0a68,0x2d61a4,
0x2db923,0x2e10e2,0x2e68e4,0x2ec126,0x2f19aa,0x2f726e,0x2fcb72,0x3024b6,
0x307e3b,0x30d7fe,0x313201,0x318c43,0x31e6c3,0x324182,0x329c7f,0x32f7b9,
0x335332,0x33aee7,0x340ad9,0x346708,0x34c374,0x35201b,0x357cfe,0x35da1d,
0x363777,0x36950c,0x36f2db,0x3750e5,0x37af29,0x380da7,0x386c5e,0x38cb4e,
0x392a77,0x3989d9,0x39e973,0x3a4944,0x3aa94e,0x3b098f,0x3b6a07,0x3bcab6,
0x3c2b9b,0x3c8cb6,0x3cee07,0x3d4f8e,0x3db14a,0x3e133b,0x3e7561,0x3ed7bb,
0x3f3a49,0x3f9d0b,0x400000,0x406328,0x40c683,0x412a11,0x418dd0,0x41f1c2,
0x4255e5,0x42ba39,0x431ebf,0x438375,0x43e85b,0x444d71,0x44b2b7,0x45182c,
0x457dd0,0x45e3a3,0x4649a5,0x46afd4,0x471632,0x477cbc,0x47e374,0x484a59,
0x48b16a,0x4918a7,0x498010,0x49e7a5,0x4a4f65,0x4ab74f,0x4b1f65,0x4b87a4,
0x4bf00d,0x4c58a0,0x4cc15d,0x4d2a42,0x4d934f,0x4dfc85,0x4e65e3,0x4ecf69,
0x4f3916,0x4fa2e9,0x500ce4,0x507704,0x50e14b,0x514bb7,0x51b649,0x5220ff,
0x528bdb,0x52f6da,0x5361fd,0x53cd44,0x5438af,0x54a43c,0x550fec,0x557bbe,
0x55e7b2,0x5653c8,0x56bfff,0x572c57,0x5798d0,0x580568,0x587221,0x58defa,
0x594bf1,0x59b908,0x5a263d,0x5a9390,0x5b0101,0x5b6e90,0x5bdc3c,0x5c4a05,
0x5cb7ea,0x5d25eb,0x5d9409,0x5e0241,0x5e7095,0x5edf04,0x5f4d8d,0x5fbc31,
0x602aee,0x6099c4,0x6108b4,0x6177bc,0x61e6dd,0x625615,0x62c566,0x6334cd,
0x63a44c,0x6413e1,0x64838d,0x64f34f,0x656326,0x65d312,0x664314,0x66b32a,
0x672354,0x679392,0x6803e3,0x687448,0x68e4bf,0x695549,0x69c5e5,0x6a3693,
0x6aa752,0x6b1822,0x6b8903,0x6bf9f4,0x6c6af5,0x6cdc06,0x6d4d26,0x6dbe55,
0x6e2f93,0x6ea0df,0x6f1239,0x6f83a0,0x6ff514,0x706695,0x70d823,0x7149bd,
0x71bb62,0x722d13,0x729ecf,0x731096,0x738267,0x73f442,0x746626,0x74d814,
0x754a0b,0x75bc0a,0x762e12,0x76a021,0x771238,0x778456,0x77f67a,0x7868a6,
0x78dad7,0x794d0e,0x79bf4a,0x7a318b,0x7aa3d1,0x7b161b,0x7b8869,0x7bfabb,
0x7c6d10,0x7cdf68,0x7d51c2,0x7dc41e,0x7e367c,0x7ea8dc,0x7f1b3c,0x7f8d9e
); code;

const sin_table_const_1Khz : array[180] of longint = (
0x800000,0x847796,0x88edc7,0x8d6130,0x91d06c,0x963a1a,0x9a9cd9,0x9ef74b,
0xa34815,0xa78dde,0xabc750,0xaff31b,0xb40ff2,0xb81c8b,0xbc17a4,0xbfffff,
0xc3d464,0xc793a1,0xcb3c8b,0xcecdfe,0xd246dc,0xd5a612,0xd8ea90,0xdc1353,
0xdf1f5e,0xe20dbe,0xe4dd88,0xe78dde,0xea1de6,0xec8cd6,0xeed9eb,0xf1046c,
0xf30bae,0xf4ef0e,0xf6adf5,0xf847d8,0xf9bc37,0xfb0a9f,0xfc32a6,0xfd33f0,
0xfe0e2d,0xfec11a,0xff4c7d,0xffb02d,0xffec09,0xffffff,0xffec09,0xffb02d,
0xff4c7d,0xfec11a,0xfe0e2d,0xfd33f0,0xfc32a6,0xfb0a9f,0xf9bc37,0xf847d8,
0xf6adf5,0xf4ef0e,0xf30bae,0xf1046c,0xeed9eb,0xec8cd6,0xea1de6,0xe78dde,
0xe4dd88,0xe20dbe,0xdf1f5e,0xdc1353,0xd8ea90,0xd5a612,0xd246dc,0xcecdfe,
0xcb3c8b,0xc793a1,0xc3d464,0xbfffff,0xbc17a4,0xb81c8b,0xb40ff2,0xaff31b,
0xabc750,0xa78dde,0xa34815,0x9ef74b,0x9a9cd9,0x963a1a,0x91d06c,0x8d6130,
0x88edc7,0x847796,0x800000,0x7b8869,0x771238,0x729ecf,0x6e2f93,0x69c5e5,
0x656326,0x6108b4,0x5cb7ea,0x587221,0x5438af,0x500ce4,0x4bf00d,0x47e374,
0x43e85b,0x400000,0x3c2b9b,0x386c5e,0x34c374,0x313201,0x2db923,0x2a59ed,
0x27156f,0x23ecac,0x20e0a1,0x1df241,0x1b2277,0x187221,0x15e219,0x137329,
0x112614,0xefb93,0xcf451,0xb10f1,0x9520a,0x7b827,0x643c8,0x4f560,
0x3cd59,0x2cc0f,0x1f1d2,0x13ee5,0xb382,0x4fd2,0x13f6,0x0,
0x13f6,0x4fd2,0xb382,0x13ee5,0x1f1d2,0x2cc0f,0x3cd59,0x4f560,
0x643c8,0x7b827,0x9520a,0xb10f1,0xcf451,0xefb93,0x112614,0x137329,
0x15e219,0x187221,0x1b2277,0x1df241,0x20e0a1,0x23ecac,0x27156f,0x2a59ed,
0x2db923,0x313201,0x34c374,0x386c5e,0x3c2b9b,0x400000,0x43e85b,0x47e374,
0x4bf00d,0x500ce4,0x5438af,0x587221,0x5cb7ea,0x6108b4,0x656326,0x69c5e5,
0x6e2f93,0x729ecf,0x771238,0x7b8869
); code;

const sin_table_const_10Khz : array[18] of longint = (
0x800000,0xabc750,0xd246dc,0xeed9eb,0xfe0e2d,0xfe0e2d,0xeed9eb,0xd246dc,
0xabc750,0x800000,0x5438af,0x2db923,0x112614,0x1f1d2,0x1f1d2,0x112614,
0x2db923,0x5438af
); code;

const sin_table_const_20Khz : array[9] of longint = (
0x800000,0xd246dc,0xfe0e2d,0xeed9eb,0xabc750,0x5438af,0x112614,0x1f1d2,
0x2db923
); code;

var rData : dword;
    i : dword;
    sin_table : array[20000] of longint;
    next_data : longint;
    led_cnt : dword;
    sin_len,sin_cnt : dword;
    led_pos,setup_cnt : dword;
    
procedure I2S_Int(); iv IVT_SPI1_TX; ilevel 7; ics ICS_SRS;
begin
  SPI1TXIF_bit := 0;
  SPI1BUF := next_data;
  if inc(sin_cnt) >= sin_len then sin_cnt := 0;
  next_data := sin_table[sin_cnt];
  if inc(led_cnt) >= 180000 then
    begin
      led_cnt := 0;
      LATB.led_pos := not LATB.led_pos;         // Invert PORTB
      LATB.7 := not LATB.7;                     // Invert PORTB
    end;
end;

procedure setup_100Hz;
begin
  LATB := 0;                 // Initialize PORTB value
  sin_cnt := 0;
  sin_len := 1800;
  led_pos := 0;
  i := 0;
  while i < sin_len do
    begin
      sin_table[i] := sin_table_const_100hz[i] - 0x800000;
      inc(i);
    end;
  next_data := sin_table[0];
end;

procedure setup_1KHz;
begin
  LATB := 0;                 // Initialize PORTB value
  sin_cnt := 0;
  sin_len := 180;
  led_pos := 1;
  i := 0;
  while i < sin_len do
    begin
      sin_table[i] := sin_table_const_1Khz[i] - 0x800000;
      inc(i);
    end;
  next_data := sin_table[0];
end;

procedure setup_10KHz;
begin
  LATB := 0;                 // Initialize PORTB value
  sin_cnt := 0;
  sin_len := 18;
  led_pos := 2;
  i := 0;
  while i < sin_len do
    begin
      sin_table[i] := sin_table_const_10Khz[i] - 0x800000;
      inc(i);
    end;
  next_data := sin_table[0];
end;

procedure setup_20KHz;
begin
  LATB := 0;                 // Initialize PORTB value
  sin_cnt := 0;
  sin_len := 9;
  led_pos := 3;
  i := 0;
  while i < sin_len do
    begin
      sin_table[i] := sin_table_const_20Khz[i] - 0x800000;
      inc(i);
    end;
  next_data := sin_table[0];
end;

procedure Init_I2S;
begin
  SPI1CON := 0; // Stops and resets the SPI1.
  SPI1CON2 := 0; // Reset audio settings
  SPI1BRG := 0;

  rData := SPI1BUF; // clears the receive buffer

  SPI1TXIP0_bit := 1;
  SPI1TXIP1_bit := 1;
  SPI1TXIP2_bit := 1;
  SPI1TXIF_bit := 0;
  SPI1TXIE_bit := 1;

  SPI1STATCLR := 0x40;        // clear the Overflow
  SPI1CON2 := 0x0000008A;     // Right-Justified Mode, AUDEN =1, AUDMON=1
  SPI1BRG := 0x00;            // to generate 180kbps sample rate, REFO1CLK 23.04Mhz, SPI1BRG div 2
  SPI1CON := 0x20810C2C;      // Master mode, CKP = 0, FRMPOL = 1, MSTN = 1

  ON_SPI1CON_bit := 1;        // SPI ON
end;

procedure Init_REFCLK; // 23.04Mhz
begin
  REFO1CON := 0;
  REFO1CON := 0x00020001;      // N = 2, PBCLK1 94.5MHz (24 MHz / 4 * 63 /2 / 2)
  REFO1TRIM := 0x0D000000;     // M = 26
  ON_REFO1CON_bit := 1;        // 23.04Mhz
end;

begin
  ANSELA := 0;               // Initialize AN pins as digital
  ANSELB := 0;               // Initialize AN pins as digital
  ANSELC := 0;               // Initialize AN pins as digital
  ANSELD := 0;               // Initialize AN pins as digital
  ANSELE := 0;               // Initialize AN pins as digital
  ANSELF := 0;               // Initialize AN pins as digital
  ANSELG := 0;               // Initialize AN pins as digital
  ANSELH := 0;               // Initialize AN pins as digital
  ANSELJ := 0;               // Initialize AN pins as digital
  
  TRISB := 0;                // initialize PORTB as output
  LATB := 0;                 // Initialize PORTB value

  TRISG.0 := 1;              // button
  
  setup_1KHz;
  
  setup_cnt := 1;
  
  Unlock_IOLOCK();
                                        // BCLK, RD1
  PPS_Mapping(_RPD2, _OUTPUT, _SDO1);   // DAT, RD2
  PPS_Mapping(_RPD4, _OUTPUT, _SDO1);   // LRCK, RD4, SS1
  
  Lock_IOLOCK();
  
  Init_REFCLK; // 23.04Mhz
  
  Init_I2S;
  
  EnableInterrupts();        // Enable all interrupts
  
  while true do
    begin
      if PORTG.0 = 1 then
        begin
          delay_ms(100);
          while PORTG.0 = 1 do nop;
          delay_ms(100);
          while PORTG.0 = 1 do nop;
          
          if inc(setup_cnt) > 3 then setup_cnt := 0;
          
          DisableInterrupts();        // Enable all interrupts
          
          case setup_cnt of
            0 : setup_100Hz;
            1 : setup_1KHz;
            2 : setup_10KHz
            else setup_20KHz;
          end;
          
          Init_I2S;
          
          EnableInterrupts();        // Enable all interrupts
        end;
    end;
end.
Best regards, Florin Andrei Medrea.

http://www.microelemente.ro/
http://www.microelemente.ro/produse-si-servicii/
http://www.microelemente.ro/custom-software/

mail : florin@microelemente.ro

User avatar
filip
mikroElektronika team
Posts: 11874
Joined: 25 Jan 2008 09:56

Re: PIC32MZ I2S generator

#2 Post by filip » 22 Jan 2021 08:24

Hi,

Thanks for the contribution! :)

Regards,
Filip.

chimimic
Posts: 178
Joined: 29 Sep 2007 14:35
Location: France
Contact:

Re: PIC32MZ I2S generator

#3 Post by chimimic » 16 Feb 2021 18:04

Thanks ! :D

Post Reply

Return to “mikroPascal PRO for PIC32 General”