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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
6 l4 j, w1 J' B( S. u% |! Emain文件:
& H# R( b9 e5 [% ]8 ^& _* \interrupt void interrupt4(void)  
# d: ~- x5 a' H, V{
2 |, ^+ v- X4 ]3 ^( H4 [# g  Uint32 sample;
4 e# d% {. O! p/ d
4 G- ]/ `' V2 r5 F, q  sample = input_sample(); // read L + R samples from ADC
, `, p8 M5 P* x: r  output_sample(sample);   // write L + R samples to DAC ; N4 i! A) }: q% Z
  return;
2 t) a# m  `0 ?4 U}
1 \" z$ i  E2 q7 |8 f* N
* S; H. f- j3 w2 W0 s+ U0 S5 {0 Hint main( void )
! w$ i, O; _; u- L7 F! N8 k% W{
  u4 R2 {+ u4 g% t0 A
7 U& @5 j" I0 u4 D! U    /* Initialize BSL */7 `5 }5 U7 [, z7 ?9 k& g
    EVMC6747_init( );/ F0 {. {, Q3 }2 N5 Z) f0 S- D; \
        /* Call evmc6747_intr function */# ]+ u1 p  Y2 R, _
    aic3106_init( );) o! K6 L/ t. t3 X' c
        while(1);
- q& ]6 g, F9 F7 U}
3 a  @& I* J& b4 W* m. r
7 f% `& C/ j- ^- f$ f8 J6 |, m5 F9 q, k! I/ X3 l
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题; ?0 q- q) p0 U$ w  t
/* Initialize MCASP1 */6 d1 c* ?2 P* E  ^& U  X
    mcasp = &MCASP_MODULE_1;
5 D( W" a( U: w, u" q% F! R    mcasp->regs->GBLCTL  = 0;       // Reset- r) G. K% t: M& U4 C2 G; c
    mcasp->regs->RGBLCTL = 0;       // Reset RX
5 ?$ K, j7 Q: W) |    mcasp->regs->XGBLCTL = 0;       // Reset TX5 {& X! y1 n9 `
    mcasp->regs->PWRDEMU = 1;       // Free-running
7 p+ q+ u+ f. O( G   // configure McASP0 receive registers
( _/ }' ?4 y+ B4 n    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
9 @$ B! Z* w# Y    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 _: [( E  [7 s4 M
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word* Q3 u/ E9 I! p# f' Z) R4 q" L
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
2 }- b. ~- N  ~( T    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
) _5 \' y* P! t1 I9 U7 V    mcasp->regs->RTDM       = 0x00000003; // Slots 0,18 M2 P5 E2 S1 B, k+ T
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
. z$ Z/ Z0 p5 }* }    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- V% G* Z/ W+ R" T: X" z7 R1 b: Q5 F: D' u) n1 O
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used- R( c! \* l/ \
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( @6 v; i: }/ t  r
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word" [  [2 r( c; f5 D* S  J) I8 v" {
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16$ o5 `9 J  w3 Y( i3 z
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK2 g4 r8 b+ x9 q
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
6 O$ A( J" N8 f) r/ m    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
: e! V# R( C" d; r2 ~    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* p8 k2 R+ H& G2 R4 D
' w+ p6 D/ u( e" l: Q
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN. _7 m8 a- M" C
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT. u9 q( I# J* m* \8 l3 T
    mcasp->regs->PFUNC      = 0;          // All MCASPs/ E: x7 T' F0 |( o
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1$ i7 i0 o, S. h  Y% Z; c9 \

% m, P( C4 b6 G: w" X" h7 `( U% s    mcasp->regs->DITCTL     = 0x00000000; // Not used
, r6 n- k; j- F1 a    mcasp->regs->DLBCTL     = 0x00000000; // Not used: S8 q1 R" n/ y3 V$ }/ k: X, O
    mcasp->regs->AMUTE      = 0x00000000; // Not used
) b6 W, Q* v" g7 m1 O* g. O4 h+ u0 f
/* Starting sections of the McASP*// p4 o  ^1 y) y5 ], h
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 2 r& y8 q2 ]" v5 q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ' z' V  t/ q& R+ f
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & R; S0 `  B" o1 T0 |
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );% j4 g& e( X5 R7 |7 U
. @! b- d. N7 a
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
6 H0 b; N2 l; i; z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );: g8 Y6 r& k' q( }5 p% m
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
* Y$ ~3 r4 {& e- V) }+ B0 R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );1 z. l- u; L; {( E! R( G5 _6 I
6 j; C! a8 Z9 Z5 y+ P
    mcasp->regs->XSTAT = 0x0000ffff; & }# t5 ?/ `" ^* x7 f3 P  r! A
    mcasp->regs->RSTAT = 0x0000ffff;
4 N/ j, E7 _4 ]9 `0 }
/ ~+ Z- j: V  W+ L6 D6 K* J: m1 \    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ `( e% @# e5 [! }6 A* b: R/ @
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; R# B. r! T- f; }    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
9 O! }" I( Z5 T" {! d& z  ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );, K& O! U6 p* h
! u* i' O$ f# Y7 a( _
    /* Write a 0, so that no underrun occurs after releasing the state machine */6 \4 |/ _9 h8 d5 r8 t- O& b
    mcasp->regs->XBUF5 = 0;
( p$ S' @' |: Y" b; |' f1 R    mcasp->regs->RBUF0 = 0;
' f: {, E. Z5 }0 q! Y0 t" {+ w4 J# X9 r9 B. }8 R7 }+ d
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ j. R' m9 j+ F0 o" X/ E: K$ y. |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
( C7 v* q  P, \" _: @    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; / _) q: A) U- F0 d' D8 s4 z1 t2 G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );1 G. p) u% l1 n( E9 s1 b

4 C1 p, P7 S0 A0 Y    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
7 a" r8 B, `% Y& Q, Q' `    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );4 j1 x" D+ b* D& p  U( Y8 b
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 9 o9 q+ i! H- h6 h6 u% a4 N  u9 a* u# a
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
2 R# f! k9 L/ a6 `2 O+ u) H) G+ b4 V) }+ o2 G. o4 i
    CSR = 0x0000;5 L4 C+ o1 o5 B8 L
    INTC_INTMUX1 = 0x3d;" t  z& o$ Z4 o: O' A
    ISTP = (unsigned int)vectors;
9 f/ w) M0 Z5 y1 ~# q0 Y. e    ICR = 0xFFF0;  
, }2 @. T. m& e: \9 U1 u) X- C    IER |= 0x12;  
% q3 q: j+ e4 A$ B! p  S; v    CSR |= 0x01;  
2 C0 Z: U9 Y+ ^0 t2 T7 f7 O6 v& B6 {2 H8 u$ p

3 {1 v' y+ \3 I: `: i+ Z1 K  L8 b5 Q' E+ _* F. `1 k! t
还有就是两个输入输出函数:: V- K) D( v/ Q& {) L( n0 g- M
void output_sample(Int32 out_data)! u9 n% l, \& ^" H4 B- ?/ B
{
; F) d) H& o6 E/ z$ a& l  AIC31_data.uint = out_data;  8 H( l; z4 M. @. Q' B' a; ~. T
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
; F: w3 _% W9 w5 J1 G" W1 `! Z* [}" n/ U6 ]2 i! u& J6 r2 [# I8 {7 ~

5 X9 ]& j- B/ T$ w% b5 mInt32 input_sample(void)
) t2 e: Z- d) n: B" v2 x{  
* j2 B0 \, D% o6 @: X  AIC31_data.uint = MCASP1_RBUF0_32BIT;5 l. z# Z" V, W: Z& X2 O
  return (AIC31_data.uint);
: y6 @: |. `( M. }}# [/ w2 q$ L3 ?& b( k: f( G

& \2 z: |' _3 s
分享到:  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, 2026-1-11 08:52 , Processed in 0.043540 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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