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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:4 ]6 I1 G9 a* m% K6 K5 T9 O
main文件:
5 s2 I; ?$ x7 c7 t$ winterrupt void interrupt4(void)  
4 D* p7 U, M: t  S# X3 V) U{
" V8 r; H5 Q+ f3 e- i. p; N1 |  Uint32 sample;
4 J- Y/ @8 `7 \# p/ C
3 F$ P2 l5 D  u# m' Y  sample = input_sample(); // read L + R samples from ADC
5 Q. L- J. V% @; H' o  output_sample(sample);   // write L + R samples to DAC
7 r. \: p/ F* C& K1 \+ ?2 E  return;
. Q; g4 w& `- k9 N) u" `}) F4 G  ?5 W+ K

& S. ^( x7 ]" `2 Y" \5 Oint main( void )
9 ?& |, v; g. E- n8 `{
/ [' ]* \3 e/ W3 A% H: D& B
# Q$ {  D( ]+ Y- c6 D) ?  m: L    /* Initialize BSL */" E& o+ a/ C9 W6 E
    EVMC6747_init( );6 f# e/ O3 ?) _/ v! J5 l# y' u
        /* Call evmc6747_intr function */
2 r5 u9 Q, h& R2 C    aic3106_init( );
5 X. N* e7 m- x        while(1);
! y* `; s2 l. i* p+ Q) U) R2 j}5 q4 v& `: k" ]9 ^5 Z7 U

& j. {% n, ]! l, ^
1 d5 y" E+ a2 l- U+ N5 u4 ~( Jaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
1 _' a. c% x- E, v) x8 R& z/* Initialize MCASP1 */
1 H: `2 i6 ^3 H$ T, z' B    mcasp = &MCASP_MODULE_1;
. t% V5 R$ O4 W7 n% d3 ]* v+ }! t    mcasp->regs->GBLCTL  = 0;       // Reset
4 N3 `7 n1 F, j7 o' i4 E    mcasp->regs->RGBLCTL = 0;       // Reset RX
! H) M$ D9 k8 a; z5 x) a$ N  t/ M    mcasp->regs->XGBLCTL = 0;       // Reset TX5 i8 t) T$ O$ e2 L7 I2 B
    mcasp->regs->PWRDEMU = 1;       // Free-running
% b8 e' R+ \. ?8 z$ D5 w   // configure McASP0 receive registers
( m2 p" s4 g+ w# D- V: R, u  s; j    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used, w! ]- c$ z# E& D/ k, j2 N9 z: B) I
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# ]' d+ j. {7 {( P+ G" B, F    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
( c6 U3 ?  i5 ~0 |$ Y    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
- [! O+ m! N' U/ |: G0 E+ I! j    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
6 i- ]1 A& \, r6 H8 t2 [( U$ A' \    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
4 |, D+ ?+ _/ v5 D+ Y6 [$ ~- ]# ]    mcasp->regs->RINTCTL    = 0x00000000; // Not used
8 H/ U9 |9 ~( D, C    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( e, c* L5 a  E) {; g( \

, D/ [2 @% a* T' t& p; `; w    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
& W6 p1 n+ l$ Q) S    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ y6 q) d4 R% `& B3 s6 s% ~    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! A0 W9 i+ a* N5 N$ E: b
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
6 ?6 I2 I" h- L    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
! }' j% G9 |9 S* q    mcasp->regs->XTDM       = 0x00000003; // Slots 0,18 |6 X, X. Q6 L! |
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
, p7 F; ]# y# m9 p    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; V! x* m. q( S9 c+ F2 e5 H' c- x
8 z  v' F( R8 T7 l& V; W
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN) |/ _! D% U4 U# \
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
* H& w5 l3 k3 o% Z2 A' F    mcasp->regs->PFUNC      = 0;          // All MCASPs: {3 P9 W4 M! A
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1/ f: e6 O5 `' h' }
; l& s+ A" U" H7 N( K
    mcasp->regs->DITCTL     = 0x00000000; // Not used
  z: \- k' A0 b( b, R    mcasp->regs->DLBCTL     = 0x00000000; // Not used( s; t: n" v" e% T. E4 O2 o% {
    mcasp->regs->AMUTE      = 0x00000000; // Not used
* T5 f1 C& \# K0 l& r' R9 y! k$ A1 I  J: ?, ^0 d
/* Starting sections of the McASP*/9 J1 L  n6 r3 m. R/ i/ @
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 \& t5 }6 I' X' m& t
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ; H8 n8 N' C. A; R* G9 S+ t
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
: u0 ~& x9 q( A) k# R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# l& L& y9 K; E

5 W, J, h1 ], o" |    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
) P" p, k+ L! {1 f/ o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
  C2 [( w* r% A9 }    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; - v6 p8 ~4 N- T4 ]
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
1 ^1 k6 c+ D4 z5 C* |1 L- [0 F3 n" b2 b. @6 f4 S% Z
    mcasp->regs->XSTAT = 0x0000ffff; 7 x3 w6 e- V) Q* O
    mcasp->regs->RSTAT = 0x0000ffff; ) @$ \0 G4 }% ?# U( y

0 T" i  Q3 C9 ?2 }, m+ Z9 \4 W    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
$ Q# @# P' G$ g8 f3 a    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );8 h9 e+ W. \, w3 S. y- N1 i9 W
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
4 c0 S/ D; q4 P& _' i    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );; F# R! J2 r; n  H/ N0 s7 n
9 S( f! p/ l, H0 k
    /* Write a 0, so that no underrun occurs after releasing the state machine */7 l- C( d" N- L6 _8 O5 x
    mcasp->regs->XBUF5 = 0;
' A3 e* A: m( N/ [! u  l1 b  U    mcasp->regs->RBUF0 = 0;% _6 N% k$ z, H7 M) O

* X, l2 g4 b' `! E    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
7 ?- Z% ?4 @, ]+ i. e3 m5 M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );- Q1 G2 ^& _/ B9 W) c( e
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; * {; g: K0 ~. c9 j$ v7 [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
: ?6 ]; T; h/ k9 E" Z
, F3 k/ }4 X  c. _" q  R# P' h    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
6 j& G  Q8 k; m2 [    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );0 H# ]# M' G' X/ @" x
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
) B) Q% ]* Q' S    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );) q1 u- o( s5 A0 d8 u

9 n7 V; ?. O& ?1 }/ B( b  x$ ^    CSR = 0x0000;7 U) _$ d" T8 a: L9 W# ?+ F1 R: k2 v9 @
    INTC_INTMUX1 = 0x3d;) s' b0 Q, X1 B# {/ x
    ISTP = (unsigned int)vectors;
+ u5 K9 S. \2 a1 B* u# l    ICR = 0xFFF0;  
6 ~1 V4 h2 m. V  j5 r0 f6 Z    IER |= 0x12;  " Q6 O% j5 c4 u. c) }1 x* Y
    CSR |= 0x01;  
: `5 `5 S" N; X8 {1 N7 @/ A4 T3 n  I
7 r  s+ i5 U, V8 \& i1 X* ?  F/ a% a

7 n* e- K/ b! w! e" T还有就是两个输入输出函数:/ m5 ^4 w- r# `
void output_sample(Int32 out_data)1 v4 p* p- x/ N  v* C# B* [& r+ G6 b
{
" L5 a0 G. Q! T  P2 y  AIC31_data.uint = out_data;  " L- P, t, T7 g. b
  MCASP1_XBUF5_32BIT = AIC31_data.uint;: f) @3 O# F4 X' w8 n, h
}  W" X/ H9 @5 ~4 ]1 t& ?$ [

- [1 X7 A+ F9 e: b) a+ y. ^# z: FInt32 input_sample(void)! K( K# {2 t1 Y& j( z
{  
2 G0 |1 u' X9 ^) ~/ K& @7 B5 n  AIC31_data.uint = MCASP1_RBUF0_32BIT;
+ m2 [8 h, y- o7 `9 i) `9 ~5 h  return (AIC31_data.uint);9 e  W( p1 U+ U4 @
}5 G# \- W3 U8 |
) v( u6 q5 _, |* Y% ?
分享到:  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-5 14:21 , Processed in 0.038851 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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