C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
% Z4 ~; c+ p9 |4 |" n& n  Kmain文件:, X4 W, s7 |9 b
interrupt void interrupt4(void)  
7 N- u8 Y2 b- t6 h6 \{4 w! v7 K, [  y7 `% \' G
  Uint32 sample;4 P& T4 T/ c) y, G

9 a, ^% k* o. F  sample = input_sample(); // read L + R samples from ADC
& a3 ~. @2 R$ X, u6 _, V# g' s1 I  output_sample(sample);   // write L + R samples to DAC 5 r! T! o# Q- |) w, o
  return;
$ e) u4 O/ j: H" s8 S% T' r}
. h; g0 c8 B$ j( R& ~% L; t) E
int main( void )
: R' \! f* n& u- d! Z9 j{
8 j5 O  n3 c4 ~, V( M, _3 j% W: _1 Z
0 \+ }" {& u" s6 V2 K: g    /* Initialize BSL */
/ R7 n4 ^$ p! ]$ q: b3 `( x/ O    EVMC6747_init( );2 p: {7 P/ S8 J1 n6 W% l0 P( {
        /* Call evmc6747_intr function */8 D8 a- h- [& g) d  n6 D1 J$ T
    aic3106_init( );/ J: j4 }, K% ?" n
        while(1);7 J+ v* N% X3 g7 y. k
}
: G# Z  F/ c" N$ [' S
( q* U( i  }7 i& o
% Z+ |: k  S8 i9 _% f- {2 Gaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题! `$ @; E: M- W3 \0 \" b
/* Initialize MCASP1 */) L# Q" ~+ D5 c; q# n- h& Y8 Q. t, P
    mcasp = &MCASP_MODULE_1;
$ w8 @. m3 b" `4 S5 y) k    mcasp->regs->GBLCTL  = 0;       // Reset) v* M$ g' _- v# k
    mcasp->regs->RGBLCTL = 0;       // Reset RX% L% K/ i% ]2 f* [
    mcasp->regs->XGBLCTL = 0;       // Reset TX* f! ?" A1 @7 u& @- w
    mcasp->regs->PWRDEMU = 1;       // Free-running- j; M/ Y  B5 K  m1 r, o
   // configure McASP0 receive registers1 k' a3 W5 C( R( U9 O" o
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
, b$ `  C, ^! t# G7 S    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 \0 m9 D9 b- S7 P' d8 |    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
5 _( @: W7 t1 `6 b- G/ w    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
2 F- _0 `- P1 Z" W    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)0 W/ o, a& R0 q' ^$ P& Y
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,15 U; f# s) ?4 y, F
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
8 @! ^2 k, X' n4 `: e    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' n. V- V! l6 ~7 k& [) t6 d( L& r2 K' v% R7 ]/ _: L2 _
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used! w8 p' A; D3 f7 q- p/ i" `
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* O; m1 l7 G6 Z! S
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
# I6 l& u" J3 D5 _    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16$ h9 a2 q' K; b# Y" {) ]
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
, ?" `  E2 T9 Y- N8 }+ D( _1 d    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
: H% ]. W/ T# e- U    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
. l# H. z- ^7 Q' v- _) \/ N    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 e. o9 @) i8 ~

5 K0 o; K0 K4 V# A& v    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN- K+ D( ^% {; I/ R% q4 B
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
* q% g) D& B# [    mcasp->regs->PFUNC      = 0;          // All MCASPs
- J- }2 w. J( f, q; R    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
  F8 F; |( H9 V# C
% U: B" u0 K- D    mcasp->regs->DITCTL     = 0x00000000; // Not used! O, T. U3 T6 C" {' C- U
    mcasp->regs->DLBCTL     = 0x00000000; // Not used% U% w& m2 D7 K9 h
    mcasp->regs->AMUTE      = 0x00000000; // Not used
, h& C9 ]- E  A/ X+ s& u
; J3 G8 i. X7 F$ f' [* k% w3 l: I/* Starting sections of the McASP*/* D+ u, F3 H/ f8 K  p
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; % d2 n/ j( i* b) }; v- M
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  0 F4 {2 i5 U9 g/ q  a
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; / N" b& }/ T- \; x; G; T
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );5 K1 I& a( Z" o2 L0 ]
, b% E% w" R0 t5 P/ Q
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
8 s( Z5 _( h7 A7 J9 F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( l6 ^- ?* \; x+ ]( L4 ~" O    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 2 Y7 c6 P1 @/ U+ y2 Y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
+ Y1 S/ H$ A. A5 r7 W7 q
# S* B" O4 N0 B, E    mcasp->regs->XSTAT = 0x0000ffff;
2 T, M* \! Z. P. D    mcasp->regs->RSTAT = 0x0000ffff; ; ^2 i: v4 c5 V2 ~
2 D0 ], ~) C2 P( b; Z9 s+ e
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
; M' {# m" I" m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
4 A  m& x/ b# d# Q% R( N, d$ O    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
- z, }. q+ f! t' Z( z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 E" ^# p5 c! x  m& B- X/ ]% k

; S) a2 J) e( u6 P    /* Write a 0, so that no underrun occurs after releasing the state machine */8 l5 Q# V1 N) l# Z( S1 E
    mcasp->regs->XBUF5 = 0;& X5 P( K8 o, Z) V0 V
    mcasp->regs->RBUF0 = 0;
4 k& N0 j' Q5 S2 g
4 s) \, l0 Y2 g: d: b# a/ y    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 7 x/ @& t( k' \3 x8 A* @
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
1 z" b' C! [3 c) d/ [2 W5 c    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; , S, l3 H" n! G6 t4 \
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );6 q9 b5 P' l3 a% I4 K

% t, h) x1 e% h, c! R+ a% V1 j3 \    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' f' x4 C" N: a: H3 y8 T" o2 f
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
- H% y0 G6 c3 h" y" X- M    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 4 s0 I" i0 e( l5 e. @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );% L3 G8 A  L4 w5 S3 ^
: C0 M4 x5 k4 ]2 n6 x$ c
    CSR = 0x0000;
( X2 |- {) n/ Y3 X    INTC_INTMUX1 = 0x3d;( ]1 b% x# }. ^
    ISTP = (unsigned int)vectors;, ?+ h  R8 j, s
    ICR = 0xFFF0;  
9 e# L/ c/ ]! n1 I8 {. \7 y" d+ c    IER |= 0x12;  
/ i' h1 R; ~0 @7 F  F- ^6 E    CSR |= 0x01;  4 ^. \  Q- _8 f8 \) E" A
$ ], _& g* a) p9 R' {  U0 x5 k5 v

6 E4 X* K/ v8 m  z
& A( V: [2 D% z" y1 Y. K" B还有就是两个输入输出函数:) w% \- H' S2 {5 r( B
void output_sample(Int32 out_data)
  G8 q0 J* G  C, m& {  v/ i- W' ?2 d{
7 n" k# U! c4 I9 L( Z  AIC31_data.uint = out_data;  : w& ^! a$ m6 i4 r4 ^) t5 \3 |+ m
  MCASP1_XBUF5_32BIT = AIC31_data.uint;+ j" x% t" X# Q: ?8 U: p3 C
}
, O; u0 }& p+ b2 e0 o# S3 L# L0 b1 v  P
Int32 input_sample(void)8 q7 M8 t* A$ Y
{  
$ R% ]2 p4 y" ~! r& U  AIC31_data.uint = MCASP1_RBUF0_32BIT;% q* t" @+ }# V& v' K: t
  return (AIC31_data.uint);) O- b  F7 t: c2 C  a$ |5 A
}4 v; w: \7 T) Q' P2 X( \
0 U$ C/ b4 @3 J1 j
分享到:  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-3-18 19:14 , Processed in 0.044261 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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