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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 b5 j( o6 B" B$ `: Y/ z
main文件:
- n8 z' w. \; ^7 Y. D0 f5 U% Sinterrupt void interrupt4(void)  ! c9 C) |& s. `) b3 u
{- P0 a; o2 S! b) {# z, t+ U
  Uint32 sample;
9 h4 U# R: i: M+ [4 I, v6 m! {- V+ {4 X. M
  sample = input_sample(); // read L + R samples from ADC
9 s) A( g2 o. _8 A/ @( t6 f3 r  d  output_sample(sample);   // write L + R samples to DAC / q# V. |3 o5 [
  return;/ j4 R7 \) L) t4 Z
}- E6 W" G5 e  e$ i+ Q* `0 ?
8 ?7 P  Y5 D7 W5 B  r2 d/ ?
int main( void )
% d6 Y, l0 n; _7 Z  p{
- C. V- A2 I4 i' L+ R7 P3 @9 r( q: P  n/ U2 G' r# B
    /* Initialize BSL */8 n. A( r% V& U7 G+ a
    EVMC6747_init( );
- T: }( @$ N  O& \, B/ Z) l! w        /* Call evmc6747_intr function */* J; f# c% r& T8 |
    aic3106_init( );
; ^' T0 u7 Y7 g  @        while(1);
5 b& x9 S. a6 d; v5 J( |8 B}
# @8 t& t0 k2 T* t- ~4 f" d. |8 [7 L  t7 D0 j7 V+ k9 g- x

4 ^3 x% W! Q! s* q7 Kaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
6 W* K2 Q, v: m! [1 g/* Initialize MCASP1 */
7 a) v3 {% k4 d: n  f/ V    mcasp = &MCASP_MODULE_1;
# j" c+ C. T% n- f' y9 ^: D    mcasp->regs->GBLCTL  = 0;       // Reset
+ d6 g+ e% V* P! ~0 O9 O5 U    mcasp->regs->RGBLCTL = 0;       // Reset RX& I' W# E% J( \8 \. E
    mcasp->regs->XGBLCTL = 0;       // Reset TX
+ U# k8 ?. _! }6 }8 h  P0 W' c# ?' B    mcasp->regs->PWRDEMU = 1;       // Free-running
. t; y+ P0 {5 z; q   // configure McASP0 receive registers
' t$ _3 T# x4 l% ?$ z4 e' H    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
2 e! F3 C; b3 k2 L2 t9 k7 m/ K    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
  Y3 f+ r) j, Y' p    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word) r. H4 s  a& I* K  D8 |  x
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
$ V. P: U' J+ y* o+ }. o4 w8 J    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)( d+ n$ I" s  B
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1/ V# U  [$ Y# x& J5 n7 A
    mcasp->regs->RINTCTL    = 0x00000000; // Not used2 l5 x9 {' J% q
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* L3 ]+ c' O$ T' h/ a

6 s/ y7 l. F& D8 T, s/ a  E/ Q3 Z3 D) Q    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used9 k  f1 D$ z" e: _' w- `, g
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 ^" w4 X2 W* A$ _4 d+ b) e
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' p' P* i0 n$ v+ ^! ~    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16; K  C+ D, F( u1 z) r6 h4 N" Z
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
8 O: y) u# t- `    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1: I) P. |4 E" w
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
, V4 c, X" N: }    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% s, n. K0 |- p8 h, [* [5 r* n% |9 _2 C- W; W4 i
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN" j1 [( G; w& J7 a: [4 f
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
* W- S7 E! c$ O, J    mcasp->regs->PFUNC      = 0;          // All MCASPs  o( z* w( @+ n$ ^3 ]. o; l  p
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
: L/ H4 }& [* e5 x% A
6 y; q* e4 j0 a    mcasp->regs->DITCTL     = 0x00000000; // Not used
1 ]5 f4 M8 h7 j3 s5 E' v* }4 @    mcasp->regs->DLBCTL     = 0x00000000; // Not used
, h3 w% T1 g. [    mcasp->regs->AMUTE      = 0x00000000; // Not used
, X! U' j' x% D+ k
. ]3 n* z0 S! {/ F( S8 I$ w/* Starting sections of the McASP*/
" E, L8 U/ _9 ?& h0 j; i8 ^  m    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
/ b7 U5 j; L5 |8 t: y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
' x3 a% ]2 W8 m2 C) \0 A    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
* A* V+ |  c- \2 }! F* K. U; h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
: g) E$ h. D2 ~! }) F* r  p" _
7 I. C0 Y) e( w8 c/ I    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 7 ]- d9 [2 j1 B* F& c  P7 s) I
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );/ P8 `+ O& R/ T! i" c: f
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;   j- P! B) S8 S0 X% b# N
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
6 ]% l7 B& Q- n' w$ \
1 R! {- c5 v2 \$ l3 u# h! Y    mcasp->regs->XSTAT = 0x0000ffff; 1 ?& C7 j+ |  a) X% Z- P# Z( I: z
    mcasp->regs->RSTAT = 0x0000ffff; ! }5 o( u+ O3 I
+ d) x2 S% Y4 S0 P' H
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;3 r* ^8 f0 s2 G1 x. O
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
$ z7 b5 u& R% P9 H/ U6 |- b    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
9 A3 O5 K' N" x0 {    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
( `' ~" }0 I& L; w6 v2 a' N9 `/ r& I' P5 [4 G
    /* Write a 0, so that no underrun occurs after releasing the state machine *// L* N3 O: z( p7 i
    mcasp->regs->XBUF5 = 0;$ k! R% `1 }  j- L, Y
    mcasp->regs->RBUF0 = 0;. X- Q8 H6 e6 O. d  H9 N8 z
; K; }( M6 a1 _6 i8 ]
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 {7 C) R8 d6 m  C; h    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
! S+ i7 q" V1 u    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
0 F7 w; U3 N1 b6 T& B    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );+ }. S# V8 L. E( D) q2 I, @

; j* [0 x. }0 U6 b3 J% U+ i    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 8 D* a* [8 X/ u6 c9 p
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );2 q$ ?5 ]& v  P6 o* i  L
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
  x6 [% k* \6 d6 P    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
& v1 v4 H- b8 N/ ]% [6 j1 \  m" Z6 ?# {1 m
    CSR = 0x0000;
0 w+ S* I8 T& m5 l# N! Y    INTC_INTMUX1 = 0x3d;
% @1 |' i% {7 R, y  R3 I; E, S    ISTP = (unsigned int)vectors;  F9 u, C' N& E+ R
    ICR = 0xFFF0;  " p7 Q" X& q) B+ m: F
    IER |= 0x12;  
0 R4 L) m* M. _; w0 ?    CSR |= 0x01;  
4 @5 c. v/ n/ j0 N: q1 h/ K! t5 p. c! g' k, D, J2 `% _; x

2 r) {- Y# g! w+ h. |4 n1 i
% b& y+ v! |% v9 _* I/ a$ @: i还有就是两个输入输出函数:
* o* V* S* Q; y$ Vvoid output_sample(Int32 out_data)
% K9 Q7 p& N8 F/ _{* p. O$ p" ]( G$ ]2 k' x! I4 J
  AIC31_data.uint = out_data;  
$ K5 |7 [- @- P9 ]$ b( Y, \  MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ k( N5 [% i6 ~* n7 y, H}+ m8 A& v- B' g6 w

1 B* N) C6 V- z! AInt32 input_sample(void)
4 @: `1 M: B+ h; N8 _{  , X; v6 M8 M& B: j" L$ }' x4 A' X7 V
  AIC31_data.uint = MCASP1_RBUF0_32BIT;. d. U) U* q0 {5 J, c4 p: T9 ~. B
  return (AIC31_data.uint);7 \$ D5 k  `/ P% |/ K
}( u9 c& b( K5 N/ h, C

8 X) A  L# g+ K. 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-22 19:44 , Processed in 0.039181 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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