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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
& z) K' p9 N8 b1 m. mmain文件:* \2 t9 h: A" x/ Y5 y  Y
interrupt void interrupt4(void)  
0 D7 Q5 [' y8 Q3 r7 q: d5 Z' L% n& I{
0 P" P$ i* t, v  Uint32 sample;
& c% s. D+ B" L2 N; ?+ E4 Y
" ~- Y  ^( x; b+ [) `  N  sample = input_sample(); // read L + R samples from ADC, v. u/ q2 d8 E' l8 Z* d
  output_sample(sample);   // write L + R samples to DAC
9 q+ s* B( ~8 N" e5 f  return;4 ^4 n! t4 u" Q2 D$ ^5 @8 M# ^
}# r1 d6 y; Z1 W/ H; F4 P! N' h
& W& z! S# W/ p  z
int main( void )
# [/ y& `5 N! g{8 N! c1 P& O. A, E' ]# S

, N2 Q6 d# y9 c5 g& o    /* Initialize BSL */
) d7 w! o( F) y% V8 N: r    EVMC6747_init( );% d8 C( s+ r! w2 s5 `2 b( u9 C4 _
        /* Call evmc6747_intr function */- H2 G0 y  Q$ |
    aic3106_init( );
' K. k5 E/ F( K! A$ Q+ m        while(1);! e7 [" S. `, z0 e
}8 b- |4 v2 @2 B; @) H( A

8 H, j) X7 {! @- g3 f# [& g3 x1 N+ A+ t! k/ j
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
' ?. U7 |6 P8 Y" _/* Initialize MCASP1 */
. ?% A$ n- U% ?) s" \- K    mcasp = &MCASP_MODULE_1;8 Q1 }% Q7 _8 H6 r
    mcasp->regs->GBLCTL  = 0;       // Reset
( \: r: I- q, G    mcasp->regs->RGBLCTL = 0;       // Reset RX7 x$ H9 K+ P! @. W+ v* ~2 t
    mcasp->regs->XGBLCTL = 0;       // Reset TX
; r. }+ b' b) M% e    mcasp->regs->PWRDEMU = 1;       // Free-running  X9 f* F0 R5 N) T- i7 E
   // configure McASP0 receive registers
, _" @$ O. M, i6 j; |+ h( R    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used7 I8 C5 O* {/ j% U- T7 i. Z3 F
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; \7 V* m; n4 U9 ~
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
, h# p( Y6 j: E; @    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)" j8 ?8 C4 Q5 e0 ?% J
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
  F5 R- [% p' T' r8 G    mcasp->regs->RTDM       = 0x00000003; // Slots 0,14 W. J' P5 s8 G* u5 ]- j' t
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
7 ^# }1 c7 _. u- k    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 a7 T1 ~8 b2 I
9 A* o+ V, v. X. g
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
+ K" n) E& E, k! ?3 d    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 N" S" I' d: t    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
: w" j6 Y7 V( A9 ^+ L8 E    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: n3 v% D& Z0 W6 D/ `; I* j0 Z1 C
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK* C, }- Y. e. C6 }9 q7 `& O1 b
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1( o* `0 w% ]6 n9 F7 ]. j7 J
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit1 i: |$ G7 ]7 b) P7 w& H8 k
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 }- U3 d7 J# G  V3 a7 k7 N8 M" Q
- ^( V& l: k1 H4 `' e: z    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
4 R/ E3 _: b2 v# p: M6 n" O; S    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
' @* J2 d* T% G) z    mcasp->regs->PFUNC      = 0;          // All MCASPs
2 s( s5 @1 k, @2 i0 {( e3 y    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX17 d. d3 V0 ]1 @' q; j7 a/ C, @
' R4 ?6 C8 {8 z# n+ C& n
    mcasp->regs->DITCTL     = 0x00000000; // Not used2 b9 m% i+ S& i
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
/ v, A) _7 T: X, s    mcasp->regs->AMUTE      = 0x00000000; // Not used
9 I& [. [, e5 S: T
# @; N; l- n' Y6 Q/* Starting sections of the McASP*/, g, b" r; |3 Y- l! n) F
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 m% l8 H" c0 X* w6 U& \
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ; N# T: {+ [# \3 Z# A& g
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
. b; A6 B8 _" N& I' {5 Y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
9 A" n  [9 c7 v) H
  ^3 B& E" N) {. l    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 5 C* ]! `6 J* j$ H9 b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
& G: w( [+ v, L) q( z& c) M9 j    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
" @+ k$ Y" s; R/ A0 Z5 ]5 T6 |( _$ `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );7 u' E) ?' l! m- B( |* `

  P0 p8 ?* O8 T4 J9 t    mcasp->regs->XSTAT = 0x0000ffff;
9 R: O/ v  H# I    mcasp->regs->RSTAT = 0x0000ffff;
  C  ~" _. G7 ]1 [% O  g+ L; Z. P0 B& i3 ?/ T4 a
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;# p9 q5 F; }) t4 M) L$ X* ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );( M0 R3 N. I% F& c/ p, ?% X
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 9 i* ~! H( w/ P8 v% {7 [2 x7 [  e: b
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
6 @0 e" z8 n% b: L& T0 y0 s" y7 o. S- I' Y
    /* Write a 0, so that no underrun occurs after releasing the state machine */
( t& J6 S6 c+ F3 P% a# r' ^) I    mcasp->regs->XBUF5 = 0;9 _3 `  x* g* X7 ~' m. h
    mcasp->regs->RBUF0 = 0;; H. O3 E; ^( z* ]$ Y! ?

6 }4 l3 a3 h5 x  M6 m    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 Y3 l9 ~2 W2 V9 ^, ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );6 ~; M  x5 Q+ w8 K1 j9 x! _# x* E4 e
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ( R) M9 U4 C, e% o0 G; A: @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
7 D! p* I# P1 `& a. C: J4 r: T) V; Z  u% W
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 f  Q+ i; C% w* E8 \3 |) |$ x
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );/ V9 r* P+ W! I, e  T8 }" U
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 2 ?4 g; f  D) P2 d
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
$ p/ t( T4 E  }5 _2 m& |: x+ q6 K: ?9 v- W* L' G* Y) z/ S4 n
    CSR = 0x0000;
/ @8 X7 }! o# I1 f5 G    INTC_INTMUX1 = 0x3d;1 q/ |" y# Z& d" J5 B
    ISTP = (unsigned int)vectors;2 T- H5 N/ H3 r# q5 i# r2 o/ q
    ICR = 0xFFF0;  
8 O5 o" N4 }2 e2 N    IER |= 0x12;  ! b8 t, @2 G0 Z+ p; X6 G
    CSR |= 0x01;  
' a5 U+ [& S( J1 E) [- \5 E
1 _: h+ J: |5 k# h+ E- K% l: Q' ^& t8 x7 e# K

; h+ l5 K# z  a% Q1 Q: J还有就是两个输入输出函数:
# Q% E5 i) Z: A4 F: |void output_sample(Int32 out_data)' R  M# f$ Z) D  {# h9 D
{
" u" |: j' U! g6 A  AIC31_data.uint = out_data;    A# ?8 n; v9 w# f( O
  MCASP1_XBUF5_32BIT = AIC31_data.uint;9 b6 j% n; G# }$ q8 g8 N2 K- a
}
6 I1 j8 i: |' g9 j. P9 S6 a$ E3 t3 ], F! A' C
Int32 input_sample(void)6 Y6 n5 \" W) {" m; @* [
{  # F- {; g9 I) U" z
  AIC31_data.uint = MCASP1_RBUF0_32BIT;4 s1 h+ b% s+ t0 s% r! N! s
  return (AIC31_data.uint);
; n: _- w# B: ]}' |5 M' K, d9 p# a: l
" u/ V  n+ n5 Y- w! C- M' {
分享到:  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-16 00:15 , Processed in 0.048522 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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