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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! h# o) D  S: {) n9 G8 a6 a  c
main文件:
% k  T" }4 [' ?/ }8 w* |2 x# zinterrupt void interrupt4(void)  0 D0 Y7 B+ S- z/ l
{
" p2 f. ^8 m5 e6 y  Uint32 sample;+ f! c/ `& d, A3 B

% I  @# z$ M9 `" x  sample = input_sample(); // read L + R samples from ADC
) x. {& Z- @& h. w0 J  output_sample(sample);   // write L + R samples to DAC
4 f+ S- h4 R/ Q9 G1 U$ s7 R  return;0 O" B/ X* v0 R: ~% e* [- ~
}
- x6 `+ Q* o; b4 V. N, d9 g) M6 A& R+ P1 H1 e0 n1 F
int main( void )
! ]8 C: f2 }* j. C8 {4 k) S7 U9 F- r: h{
! G0 z, f4 T. A9 E) j" `
/ _/ D( b; P( p& i& i  i    /* Initialize BSL */0 a! E: S1 e' |
    EVMC6747_init( );( Y6 v9 [# w/ l, }4 W- I" ~7 {
        /* Call evmc6747_intr function */5 Q' N% _  i2 {% n  G) _5 N! i" r; }
    aic3106_init( );/ v) a  X/ Y6 e4 p8 a8 e$ Z
        while(1);( a0 W7 F: m* f% w$ V! a
}
6 _* S; O/ R( W$ ?! ~9 `! w9 l$ }1 F' m
) Q( i0 y. [4 I9 s4 y0 h
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) k+ R/ K7 H! T% o7 X3 E+ n4 a
/* Initialize MCASP1 */
7 _. c; w' i! i( Y5 u1 U- m- f    mcasp = &MCASP_MODULE_1;' r* p  }: {* o0 _" n& S
    mcasp->regs->GBLCTL  = 0;       // Reset
0 F8 V! O; d! h0 F- c    mcasp->regs->RGBLCTL = 0;       // Reset RX
8 z4 \  P, s9 D9 j    mcasp->regs->XGBLCTL = 0;       // Reset TX
. [- U- y$ I3 D1 o" v5 O0 y/ O    mcasp->regs->PWRDEMU = 1;       // Free-running" q7 H0 ^1 G, O: }
   // configure McASP0 receive registers
8 r5 ^. r# n4 |& c" K0 K    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
7 Z( u: |" |" o6 X7 B" G    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' ~9 X) X0 u; |    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word* s% v( S0 O* Y; o
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)7 ]& c2 B5 M  e2 [
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
, ^) v9 c( M1 |7 q0 X    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1& B9 d/ g" ?7 j9 S+ [! ~
    mcasp->regs->RINTCTL    = 0x00000000; // Not used  _2 y9 x) H, u% p) u
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 O9 I, ]* s! u

2 q( s( T: l6 a& T    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used8 m7 i+ e) d  `( J
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 S" k6 L5 ^8 j# ], Z$ f( W    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
( W0 w9 e( C5 `/ e4 {) S" K    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16' R' I& i" k0 [* ]
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK  ^' f2 [+ l/ L! z
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,14 B! x, h9 z$ z* X
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
/ o- e' I9 a5 X/ S, e1 f    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ i$ ], g; m) x. J8 V
- Q) }& q  h( q' T+ N% N    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
4 }. Q  g' i* e* i0 Y. z$ N6 ?    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
* O8 I6 k6 b# t2 y" C1 h! A6 T' K! y    mcasp->regs->PFUNC      = 0;          // All MCASPs) n: Y. R0 c# ]! f2 a8 u: a
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1; f# \8 ?/ |/ f7 p2 K( q

/ J6 ^+ s0 Z$ l. Y% A4 R( q/ N5 v% R3 Y* o    mcasp->regs->DITCTL     = 0x00000000; // Not used1 o. e2 w0 @& c, R; y
    mcasp->regs->DLBCTL     = 0x00000000; // Not used: Y9 U+ v6 f1 L9 k0 a
    mcasp->regs->AMUTE      = 0x00000000; // Not used8 ~. ^! j9 A7 X# O9 }

' W) D5 S7 c2 z% \) m/* Starting sections of the McASP*/
% C' c' x/ Z' j* j& S+ m    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ' D; [5 R: W0 p( w+ ]
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  - h+ X; q& J6 B6 l& r, F
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
1 f8 [- n# J% K    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );/ j, n1 H: e# I/ D  e

' Y) m/ \* L6 m$ s( O    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 0 J$ C& E! @! Z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
* R; n" N  [& p1 }! X( q- i$ }* [    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; : O  t4 L8 t" X4 r
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );) i2 n* i9 w# Q3 @* |

  v& B; V2 D; _. Z. B    mcasp->regs->XSTAT = 0x0000ffff; ; l1 I5 ?- c% b. d  }% s
    mcasp->regs->RSTAT = 0x0000ffff; ; P7 n8 y2 T9 a& O3 W
6 z' |  ]7 K; C1 a8 z) Y% a
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! r0 t' x5 F# y# c* f9 }0 J
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
+ L+ E$ C) H, I3 f    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ) K: t" J" S) y8 C
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );% Z6 i5 ?/ v# s, c
" R9 c' m; y/ l9 d$ Z3 P+ B9 }
    /* Write a 0, so that no underrun occurs after releasing the state machine */; Z7 d5 J/ Z  }2 z4 h6 W' s
    mcasp->regs->XBUF5 = 0;
3 }4 ^& @; x0 E. r2 \    mcasp->regs->RBUF0 = 0;
" `" b0 @- k) Q/ B( f1 C% z! `6 g
8 `: O. d/ o3 r3 H    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
- F5 `0 R- z1 K' p) {/ |) c; |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
1 _" B- I! U$ l; f1 s    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; % m- [7 M2 A6 X6 m1 l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );6 |# b- e4 G9 X! T
4 c8 ^5 i: ?8 i7 F
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
& g2 a- E3 Z5 P2 T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );& j0 I' m& j4 P! V" w
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; + j  x7 k! z. V
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
, k. ?/ F: s$ R* N' g: w) R/ K) W9 Q8 j7 @1 E6 {
    CSR = 0x0000;
7 S% s6 `& \4 k2 S; Q7 g" v4 v    INTC_INTMUX1 = 0x3d;; l  f$ r# w$ L
    ISTP = (unsigned int)vectors;
# C4 i# _/ j+ G$ i& x$ z# N, {    ICR = 0xFFF0;  7 j3 O. ~0 [! b( _3 K3 u, H
    IER |= 0x12;  
. W7 q% y/ \: Y    CSR |= 0x01;  
! g. I" T3 e3 D0 H7 S* i+ W8 G
/ H; m6 a2 p+ O5 @5 X  F8 v
5 \, ]& o' m, p; n' H8 Y& w7 X1 K; W( H1 I4 e/ F9 G' Q
还有就是两个输入输出函数:  O4 a" ~) e4 }; u, Q3 K" }
void output_sample(Int32 out_data)
4 \5 h- H- c: i& L) y# G8 ~{
8 U3 G- K. _8 P$ v( q9 b  AIC31_data.uint = out_data;  
/ A0 c0 U" ?5 G6 t  MCASP1_XBUF5_32BIT = AIC31_data.uint;
: d1 N7 ]' v; x}
! m0 z8 X5 K( M) s
& w2 i; U" p9 L2 ~, l4 \" ~Int32 input_sample(void)* [4 Z7 V/ g6 T! X, g# ]& k/ ~& G
{  - W& [$ x( ^9 k) t
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
5 k0 v) R; P2 o% p8 ?: _  return (AIC31_data.uint);+ c5 L0 ]: u% @$ O; g8 Z- g" n7 q
}
+ ]- V! m  ~! V! Y# Y& C, O6 c7 I) u
分享到:  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-11-10 10:04 , Processed in 0.037262 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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