C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5788|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:; u/ P0 t0 Y( q( Z% {! F
main文件:7 e7 k9 Q4 K: i8 ^3 g$ U! G1 X
interrupt void interrupt4(void)  6 t# q+ e) U. p
{
6 _+ a7 [: X. b) r5 ^  Uint32 sample;9 M) U+ x$ r+ A" n1 n* b' r" ]: ]
* \7 V" E0 y5 g4 p
  sample = input_sample(); // read L + R samples from ADC) y- G8 y& X' w, O# r
  output_sample(sample);   // write L + R samples to DAC
( U; f5 z2 Y3 M5 A+ m8 W- G) ^" G  return;
, E  Y. q# }9 ~8 ~' U}
8 ~5 q/ W8 e) Y/ [3 J9 x# p) E9 Y0 Z3 M' g9 u$ f
int main( void )5 C0 O2 y8 v/ C0 ^$ J0 y' `
{( [; ^3 d# T1 n  }6 ]- _
: i4 L1 [, Q5 ^  P5 `- ?' {2 P
    /* Initialize BSL */4 Q7 q4 i2 [2 ^' H3 f
    EVMC6747_init( );. P7 x/ v( D. O: i+ F: L
        /* Call evmc6747_intr function */6 ?3 ^' {# A4 N6 t
    aic3106_init( );/ o$ F4 ~3 @8 G+ Y! V7 X: l3 y7 |
        while(1);
; @1 O" Z5 `0 |: c* R1 I7 J}
1 m' w- a! o% R& k
$ Z5 `' g' C" z. _, N1 C$ w
' ^; L- s* O# K5 P' w/ _0 Waic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题1 E' N3 ]  d( C
/* Initialize MCASP1 */
# U, @) A: @2 y7 V! B    mcasp = &MCASP_MODULE_1;- M0 ?! F4 L% x: `
    mcasp->regs->GBLCTL  = 0;       // Reset
4 {+ w7 \3 W, e: W. ?    mcasp->regs->RGBLCTL = 0;       // Reset RX1 k2 S/ e' r# J* Y3 y
    mcasp->regs->XGBLCTL = 0;       // Reset TX
3 @6 z5 J% v4 c4 c4 |* `    mcasp->regs->PWRDEMU = 1;       // Free-running
: Z* s; ^' \3 r! @! \: @   // configure McASP0 receive registers
* f+ }4 S2 F( f/ D1 w8 ?5 K    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used' Z8 m' c8 l/ f: D/ J0 y
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" b6 z" k( _6 U6 ~    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
4 u8 X6 z9 N0 Z7 O+ _& `    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
+ |( b4 z8 s3 T* H+ u1 g: E4 J; g    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)! U! P1 H4 u8 |+ E
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
" _5 F. ?+ O! q$ K* Y    mcasp->regs->RINTCTL    = 0x00000000; // Not used
0 z. U4 t# Y! E: I    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# n2 T* w; M5 Y2 O/ B+ F/ _/ C) ]2 E. @/ f8 \' F% y% c" u( E
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
' |/ i. k  z7 V' c1 C    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 b8 n* M  i9 p. ~6 E6 e" o9 H    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
0 d; W9 e; o# m0 ~- Z    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
0 x. D3 v6 p" h    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK1 ]4 A2 {; V  R- Z
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
9 [/ t9 j2 p& X, b( M    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit7 j) O7 v6 g# e5 q
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 T/ @; d; N" x7 |
6 J  j' R+ G( L7 A1 i    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN/ f- r# [+ D9 A! M; N, Q
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT- M3 S; Y( w; C8 F& N
    mcasp->regs->PFUNC      = 0;          // All MCASPs; C* P# P% s8 G6 z3 |- c
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
; d& ^7 m& t- O7 O6 _
5 i) F8 g3 y0 i+ s8 a$ N6 |7 W    mcasp->regs->DITCTL     = 0x00000000; // Not used
. f! A* z, X, W0 h4 X4 q- ~    mcasp->regs->DLBCTL     = 0x00000000; // Not used
5 C& M+ D) o8 r% N3 X2 c    mcasp->regs->AMUTE      = 0x00000000; // Not used5 w$ @8 A5 [4 d

, G1 O3 O" J# Z& t- n/* Starting sections of the McASP*/; {" M( }$ v0 Y6 f( z. w' Y
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 8 w" t; }/ L; n# t* C
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  1 [3 ^1 x/ g: B0 _6 Q
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ! U0 o: t/ b, k) `$ Z- f! R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ ^9 ]' [/ `- \. G; _7 h6 J' b: O; {7 R+ N' Y/ b
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
1 Y/ ~) O% X* X: ?& S2 m# U    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
  t2 i4 g; H+ K+ F1 A    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
1 w' ?0 D0 n5 ^% k% d8 x0 r' K% q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
; _" o( w# \* t+ w" L! _2 n$ h
. V2 I: c# S% O1 ]# O0 W    mcasp->regs->XSTAT = 0x0000ffff;
4 p1 q& m( O0 m1 B5 |    mcasp->regs->RSTAT = 0x0000ffff;
# K  \- L3 b6 ?' T& k- n( C' A0 s3 C! r  x5 ^
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
/ U/ L& X0 l" [) }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
* |4 Y8 G& w* A& c0 [    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 1 d3 \, H3 O6 O
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );- p5 `9 Z7 D, H: K! U* `$ r

' ]7 S1 N" w( g5 i+ }, q) a+ `. h9 S/ n    /* Write a 0, so that no underrun occurs after releasing the state machine */" D! W" R* j- P0 F- ^
    mcasp->regs->XBUF5 = 0;
, B* }* S9 M# P0 e1 [# T, n$ p* [    mcasp->regs->RBUF0 = 0;  \1 k6 N+ {( l: P5 L  k  n# ]5 T
- p* o' ~' j3 g1 k: i( K# l# p
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " s- W5 w4 {" a) |6 Q$ q* n* m7 B8 K
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
" l; H9 c1 W) _- x- [! D+ G0 I    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; $ f. Z  O; N) v0 h3 @* o8 ]
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
' P9 |1 a- R; T& X2 E9 G9 N  G- H, s
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
9 v0 Q  s8 u8 r& A* A. X: t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 Q. Q4 p, O$ t2 q: E6 J    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
$ s8 [/ r, g7 v4 {' V    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );  H; \% }5 F) o% i! c- x
. {! O5 W0 D% b# F7 S( M$ ?" F
    CSR = 0x0000;$ o, e% u) k% _
    INTC_INTMUX1 = 0x3d;! ]6 J" p1 b& A; |5 A
    ISTP = (unsigned int)vectors;# A% Q% y1 W( p- w. @% A
    ICR = 0xFFF0;  
0 q1 c4 {8 Q6 @- N1 V' H8 x% G    IER |= 0x12;  
# |* t2 j/ E  }5 o    CSR |= 0x01;  % V; k; s7 R, f8 \

8 n( P- v1 b) |, l$ u1 ~+ l) q8 K. `2 f! }$ Q6 e' U2 U

+ m8 o; W* W& \0 W7 d# N0 R7 v还有就是两个输入输出函数:3 s* ?; |; l6 n
void output_sample(Int32 out_data)
5 Q/ l( ~5 W2 V% D% c; x) K9 E{
' Y+ Y2 t( j3 r% U8 N8 f5 Z  AIC31_data.uint = out_data;  
9 w7 n9 e+ d; P$ y4 e6 R" W  MCASP1_XBUF5_32BIT = AIC31_data.uint;$ `9 z2 _& |/ C& a5 C
}1 Y8 R' X- c. `9 E4 ~
, O5 v# U: E7 z' r/ K0 ~# @
Int32 input_sample(void)& y5 R+ ~! t9 q! a8 ?/ Z5 Y* h' D
{  
; H) ?  n" ~5 j; H7 y; r6 m  AIC31_data.uint = MCASP1_RBUF0_32BIT;
+ r( {1 I: e6 k/ L/ _: T  return (AIC31_data.uint);0 K. a/ @- U; Q0 p$ d
}
8 X6 E* S* {2 o" v1 J7 \$ ?5 y" `, T$ j: O' t" J% {9 x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-12-12 14:14 , Processed in 0.040686 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表